2012-10-26 34 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!它真的帮助:) –