不能替换所有出现的引用(“)

时间:2016-09-22 11:46:47

标签: ios objective-c nsstring

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

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

但代码只替换其中一个引用而不替换第二个。

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

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

虽然我们期待:

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

我想知道第二个没有替换的问题是什么?

3 个答案:

答案 0 :(得分:6)

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

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)。第二个双引号可以是左或右双引号,

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

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

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

您将获得输出

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

所以现在 characterSetWithCharactersInString 如何工作是个问题,所以我不是字符集的专家但IMHO,characterSetWithCharactersInString方法替换出现字符串而不考虑部分相同的字符串的unicode而stringByReplacingOccurrencesOfString withString用完全匹配的unicode字符串替换字符串。

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

答案 1 :(得分:2)

\“حقسنوات”\最后一个之间有一个空格,只需删除空格然后尝试相同的代码即可。

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

out put

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

答案 2 :(得分:0)

حق سنوات之后尝试删除空格的下面的字符串。

复制下面的代码并检查:

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

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