2

文字のセットを単一の文字に置き換える必要があります。わかりました 問題ありません。これには多くの方法があります。現在、私は以下を実装しています:

-(NSString *)spank:(NSString *)string
{
    NSCharacterSet *buggers = [NSCharacterSet characterSetWithCharactersInString:BAD_CHARS];
    return [[string componentsSeparatedByCharactersInSet:buggers]
                   componentsJoinedByString:GOOD_CHAR];
}

My problem is discovering other sets of characters that are in need of being replaced within that same string.

例えば

#define BAD_CHARS @"`^"
#define GOOD_CHAR @"|"
#define TEST @"Lor*em` ipsum dolor ^sit amet"
...
clean = [self spank:TEST];

console log: clean = "Lor*em| ipsum dolor |sit amet"
ただし、* を別の文字に置き換えるとよいでしょう。他のケースは後で追加できます。


これを解決するには、次のことができます。

  1. 署名を変更したことを認めれば、同じ文字列に対してメッセージが繰り返しスパンキングされます。(退屈で、反復的で、非効率的)

    -(NSString *)spank:(NSString *)string bad:(NSString *)badset good:(NSString *)good;
    
  2. 列挙を使用します。(私はこれを成功させて実装しました)

    -(NSString *)spank:(NSString *)string
    {
        static NSDictionary *blackbook;
        if (!blackbook) blackbook = [NSDictionary dictionaryWithObjectsAndKeys:
                                                  GOOD_CHAR_A, BAD_CHARS_A,
                                                  GOOD_CHAR_B, BAD_CHARS_B, nil];
    
         __block NSString *pure = string;
        [blackbook enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
            NSCharacterSet *buggers = [NSCharacterSet characterSetWithCharactersInString:key];
            pure = [[pure componentsSeparatedByCharactersInSet:buggers]
                            componentsJoinedByString:obj];
        }];
    
         return pure;
    }
    
  3. NSCoder からコーダーを実装します。これは私がまだ探求していない領域です。

  4. php を使用します。クライアントに返す前に、php で文字列を消去するオプションがあります。そちらの方がやりやすいかもしれません。考え?

  5. 私がまだ思い付いていない他のよりクリーンで簡単な方法がありますが、おそらくあなたは持っているでしょう。

ご提案いただきありがとうございます。これはソリューション#2で機能しています。私が見たいほど簡潔ではありません。

4

1 に答える 1

2

私にとってより簡単な解決策はこれですが、おそらく最高のパフォーマンスではありません。

NSString *text = @"Lor*em` ipsum dolor ^sit amet";
NSDictionary *dictionary = @{@"*":@"",@"^":@"",@"`":@""};
for (NSString *key in dictionary)
{
    text = [text stringByReplacingOccurrencesOfString:key withString:dictionary[key]];
}
NSLog(@"TEXT : %@",text);

編集1:

少なくともその例では、これも私にとってはうまくいきます

NSString *text = @"Lor*em` ipsum dolor ^sit amet";
NSCharacterSet *charSet = [NSCharacterSet characterSetWithCharactersInString:@"*^`"];
text = [[text componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@""];
NSLog(@"TEXT : %@",text);
于 2013-09-13T19:17:40.880 に答える