2016-09-22 70 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:@"*****"];