0

わかりました、次の文字列があるとしましょう:

R RATS ARE FAR

独立した R を X に置き換えて、次のようにします。

X RATS ARE FAR

stringByReplaceingOccurrencesOfString を試しましたが、すべての R が X に置き換えられます。それを達成する1つの方法は、文字の前後にスペースがあるかどうかを確認することです。これは、文字が独立していることを意味し、その後、キルに進みますが、このアプローチは非常に不十分です。また、文字列は動的であり、R の位置も動的です。

4

2 に答える 2

2

ここでは、英数字以外のほぼすべての文字で単語を囲むことができると想定していますよね? (それ以外の場合は、@" R " を " X " に置き換えて、先頭/末尾のオカレンスの特殊なケースを追加します)


それを行う1つの方法は、 RegexKitLite を使用することです

[string replaceOccurrencesOfRegex:@"\bR\b" withString:@"X"];

( PCRE スタイルの正規表現で\bword * b *oundaries を示します)


そして、代わりに役立つかもしれないCFStringTokenizer (リンクされたドキュメントを検索) があります。kCFStringTokenizerUnitWordBoundary

于 2011-04-12T23:22:28.363 に答える
1

私はこのようにします:

NSString *statement = @"R RATS ARE FAR";
statement = [statement stringByReplacingOccurrencesOfString:@" R " withString:@" X "];
// now check if the string starts with R + space
if ([statement hasPrefix:@"R "])
    statement = [statement stringByReplacingOccurrencesOfString:@"R " withString:@"X " options:0 range:NSMakeRange(0,2)];
// now check the end
if ([statement hasSuffix:@" R"])
   statement = [statement stringByReplacingOccurrencesOfString:@" R" withString:@" X" options:0 range:NSMakeRange([statement length] - 2, 2)];

この文字列で多くの置換を計画している場合は、 を使用する必要がありますNSMutableString

于 2011-04-12T23:38:36.480 に答える