4

我使用代码打击将 \\ 替换为 \

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

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

但看起来 stringByReplacingOccurrencesOfString 不起作用。两个都输出

 \u597d\u6f02\u4eae\u7684\u5a5a

欢迎任何评论

4

2 回答 2

5

这是因为源字符串不包含双斜杠:编译器在创建字符串常量的过程中会消耗所有双斜杠,并用单斜杠替换以获得最终字符串:

\u597d\u6f02\u4eae\u7684\u5a5a

当您在字符串常量中使用斜线时,需要两个斜线来表示一个斜线。当您在传递给正则表达式的字符串常量中使用斜杠时,您需要四个斜杠:四个斜杠中的两个将由编译器使用,然后其余两个中的一个将由正则表达式编译器使用。

这是您的示例,它可以满足您的预期:

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 回答