4

コードブローを使用して \\ を \ に置き換えます

 NSString *str =@"\\u597d\\u6f02\\u4eae\\u7684\\u5a5a";

 str=    [str  stringByReplacingOccurrencesOfString: @"\\\\" withString: @"\\" ]; 

しかし、stringByReplaceingOccurrencesOfString が機能しないようです。どちらも出力

 \u597d\u6f02\u4eae\u7684\u5a5a

コメント歓迎

4

2 に答える 2

5

これは、ソース文字列に二重スラッシュが含まれていないためです。すべての二重スラッシュは、文字列定数を作成するプロセスでコンパイラによって消費され、最終的な文字列に到達するために単一のスラッシュに置き換えられます。

\u597d\u6f02\u4eae\u7684\u5a5a

文字列定数内でスラッシュを使用する場合、1 つのスラッシュを表すために 2 つのスラッシュが必要です。正規表現に渡す文字列定数内でスラッシュを使用する場合、4 つのスラッシュが必要です。4 つのうち 2 つがコンパイラによって使用され、残りの 2 つのうちの 1 つが正規表現コンパイラによって使用されます。

これはあなたが期待したことをするあなたの例です:

NSString *str =@"\\\\u597d\\\\u6f02\\\\u4eae\\\\u7684\\\\u5a5a";
NSLog(@"%@", str);
str=    [str  stringByReplacingOccurrencesOfString: @"\\\\" withString: @"\\" ];
NSLog(@"%@", str);

出力は次のようになります。

\\u597d\\u6f02\\u4eae\\u7684\\u5a5a
\u597d\u6f02\u4eae\u7684\u5a5a
于 2012-05-09T01:38:58.967 に答える
0

にはstrありません-ご覧のとおり、 s\\\\しかありません...最初の割り当てステートメントの後に出力するものであるため、置き換えるものは何も見つかりません。\\stringByReplacingOccurrencesOfString

于 2012-05-09T01:38:47.970 に答える