2012-10-26 33 views
0

我已經看過this question,但沒有解決方案。 這是問題所在。如何替換NSString中 xa0字符的出現

po [myNumberFormatter stringFromNumber:myNumber] 

輸出 - >(ID)$ 4 = 1.500,00

p (char) [(NSString *)[myNumberFormatter stringFromNumber:myNumber] characterAtIndex:1] 

輸出 - >(炭)$ 5 = '\ XA0'

po [(NSString *)[myNumberFormatter stringFromNumber:myNumber] stringByReplacingOccurrencesOfString:@"\xa0" withString:@" "] 

輸出 - > (id)$ 6 = 1.500,00

但有一點需要注意的是,在屏幕上,值1.500,00看起來像1 500,00。 但有沒有什麼辦法可以將字符串中的'\ xa0'字符轉換爲@「」?

以下解決方案已經可以工作,但它存在將未包含的所有內容轉換爲空白字符的問題。

po [(NSString *)[myNumberFormatter stringFromNumber:myNumber] stringByReplacingSequenceOfCharactersInSet:(NSCharacterSet *)[[NSCharacterSet characterSetWithCharactersInString:@",."] invertedSet] with:@" "] 

編輯 --------------

我試過下面的答案,我認爲這是錯誤的監守

po [(NSString *)[numberFormatter stringFromNumber:theNumber] stringByReplacingOccurrencesOfString:@"\u00a0" withString:@" "] 

仍產生了相同的結果(\ xa0字符仍未被刪除)。但是當我沒有將它放在調試器中,而是將它放在代碼中的NSString中時,正確答案被存儲並且\ xa0字符被刪除。猜猜我不應該單獨依靠調試器日誌。

回答

5
NSString *str = // string to cleanup 
str = [str stringByReplacingOccurrencesOfString:@"\u00a0" withString:@" "]; 

在編譯時將會用一個實際的不間斷空間替換\ u00a0。

+0

我試圖@ 「\ u00a0」,但是這是行不通的。任何其他建議?如果需要,我可以告訴你整個代碼。 –

+0

我在我自己的代碼中這樣做,它工作正常。您可以嘗試用代碼中的實際非休息空間替換\ u00a0。從編輯菜單中選擇特殊字符。轉到00a0字符並插入到您的代碼中。 – rmaddy

+0

在上面添加了修改。謝啦。 –

1

在我看來代替「\ u00a0」不是一個通用的解決方案,因爲有樣帶時間服務器可以發送任何其他Unicode字符,則代碼將不能夠處理的機會。此外「\ u00a0」並非該串中的一個character.PFB,我用來濾除只能從服務器響應的數字,這是代碼:

phoneNumber= "000 \U00a0950"; 

因爲我只是想號碼phoneNumber的我寫道:

self.phoneNumber = [NSMutableString stringWithCapacity:[[_storeDetails objectForKey "phone"] length]]; //which is 000 \U00a0950 

NSCharacterSet *numberCharacterSet = [NSCharacterSet decimalDigitCharacterSet]; 

for (int i = 0; i < [[_storeDetails objectForKey "phone"] length]; i++) 
{ 
unichar characterOfPhoneNumber = [[_store objectForKey "phone"] characterAtIndex:i]; 
    if ([numberCharacterSet characterIsMember:characterOfPhoneNumber]) 
    { [self.phoneNumber appendString:[NSString stringWithFormat "%c",characterOfPhoneNumber]]; 
} 
} 

//在上面的代碼我解析每個字符,並檢查,如果這是一個數字,補充說,在一個數組,因而該陣列是unicode免費。 PS:\ U00a0是一個字符

+0

Thanx!它真的幫助:) –