不能替换所有出现的引号 (")

can not replace all occurrences of quotation (")

我使用下面的代码将所有出现的引号 (") 替换为另一个字符串:

        NSString *cluasesText = @"آخرین حقوق کارگر را به‌عنوان \"‌حق سنوات\" به وی ";
    cluasesText = [cluasesText
                   stringByReplacingOccurrencesOfString:@"\"" withString:@"*****"];

但代码只替换其中一个引号,不替换第二个。

我还检查了两个标志是同一个字符,但我想知道为什么它没有替换第二个。实际上 运行 代码后的结果是:

آخرین حقوق کارگر را به‌عنوان "‌حق سنوات***** به وی 

而我们预计:

آخرین حقوق کارگر را به‌عنوان *****حق سنوات***** به وی

请问第二个没有替换是什么问题?

试试下面的代码来替换你想要的字符,

NSString *cluasesText = @"آخرین حقوق کارگر را به‌عنوان \"‌حق سنوات\" به وی ";

NSCharacterSet *charsToBeReplace = [NSCharacterSet characterSetWithCharactersInString:@"/:.\""];

cluasesText = [[cluasesText componentsSeparatedByCharactersInSet: charsToBeReplace] componentsJoinedByString: @""];

希望对您有所帮助...

编辑和更新:

正如@Husein Behboodi Rad 所问,让我解释一下出了什么问题,

第一次出现转义字符,即阿拉伯语文本中的 \" 与第二个 \" 具有不同的 unicode 编号 \u005c\u0022 \u005c\u0022\u200c,如果您复制并粘贴第一个转义符字符即 \" 然后是第二个转义字符即 \"‌ 在 char 到 unicode 转换器中它会显示不同的 unicode 因为它们都是不同的。

所以在你的第一行字符串替换中,

cluasesText = [cluasesText
               stringByReplacingOccurrencesOfString:@"\"" withString:@"*****"];

您已输入普通英语双引号作为第一次出现的 \" 匹配项,stringByReplacingOccurrencesOfString 方法仅替换与精确字符串(具有相同的 Unicode)匹配的字符串。第二个双引号可以是 Left或者右双引号,

因此,如果您必须尝试一下,只需添加以下代码,

NSString *cluasesText = @"آخرین حقوق کارگر را به‌عنوان \"‌حق سنوات\" به وی ";

cluasesText = [cluasesText
               stringByReplacingOccurrencesOfString:@"\"" withString:@"*****"];
cluasesText = [cluasesText
               stringByReplacingOccurrencesOfString:@"\"‌" withString:@"*****"];

你会得到

的输出
آخرین حقوق کارگر را به‌عنوان *****حق سنوات***** به وی

那么问题是 characterSetWithCharactersInString 是怎么工作的,所以我不是字符集专家,但是恕我直言,characterSetWithCharactersInString 方法替换出现的字符串而不考虑字符的 unicode部分相同的字符串,而 stringByReplacingOccurrencesOfString withString 将字符串替换为完全匹配的 unicode 字符串。

这就是我现在可以向您解释的内容。

在\"‌í سنوات"\ 最后一个之间有一个 space,只需删除 space 然后尝试使用相同的代码即可。

var string : NSString = "آخرین حقوق کارگر را به‌عنوان \"حق سنوات\" به وی"
    print(string)
    string = string.stringByReplacingOccurrencesOfString("\"", withString: "*****")
    print(string)

输出是

 آخرین حقوق کارگر را به‌عنوان "حق سنوات" به وی
آخرین حقوق کارگر را به‌عنوان *****حق سنوات***** به وی

试试下面的字符串,其中在 حق سنوات.

之后删除了 space

复制以下代码并检查:

NSString *cluasesText = @"آخرین حقوق کارگر را به‌عنوان \"حق سنوات\" به وی ";

cluasesText = [cluasesText
                   stringByReplacingOccurrencesOfString:@"\"" withString:@"*****"];