2016-09-22 29 views
4

我用下面的代码替换报价所有出现的另一个字符串(”)的所有实例:不能代替引号(“)

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

但代码只更换语录之一,不替换第二个。

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

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

虽然我们期待:

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

我想知道那是什么,第二个是不更换问题?

+0

你期望 –

+0

输出我更新我的帖子 –

回答

6

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

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

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

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

希望它可以帮助你......

编辑和更新:

由于要求通过@Husein Behboodi RAD,让我解释发生了什么问题,

在你的阿拉伯语文本中第一次出现转义字符“\”有不同unicode数字\ u005c \ u0022比第二个\“one \ u005c \ u0022 \ u200c,如果你复制并粘贴第一个转义字符,即\”,然后第二个转义字符ie \“在char到unicode转换器它会显示你不同的unicode,因为它们都是不同的。

在你的字符串替换的第一线

所以,

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

你已经进入了正常的英文双引号如\”的比赛中第一次出现和stringByReplacingOccurrencesOfString方法只替换已匹配的确切字符串字符串(用相同的Unicode),第二个双引号可能是左或右双引号,

所以,如果你必须给它一个尝试,只需添加以下代码,

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

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

,你会得到的输出作为

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

所以,现在怎么来characterSetWithCharactersInString正在为这个问题,所以我不是字符集,但专家恕我直言,characterSetWithCharactersInString方法替换字符串发生不考虑字符串的unicode部分相同,而stringByReplacingOccurrencesOfString withString用精确的unicode匹配字符串替换字符串。

这是我现在可以解释你的。

+2

这将是巨大的,如果你提供的细节,为什么这个工程对OP的问题... –

+2

也可能你请注明更多关于解决方案? –

+1

为您的良好答案Bharat投赞成票。 – user3182143

1

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

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

出认沽是

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

问题与目标c –

0

试试下面的字符串中حق سنوات后取出空间。

复制下面的代码,并检查:

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

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