0

我已经看过这个问题,但没有解决方案。这是问题所在。

po [myNumberFormatter stringFromNumber:myNumber]

输出--> (id) $4 = 1.500,00

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

输出--> (char) $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:@"0123456789,."] invertedSet] with:@" "]

编辑--------------

我试过下面的答案,我认为这是错误的,因为

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

仍然产生相同的结果( \xa0 字符仍未删除)。但是当我没有把它放在调试器中,而是把它放在代码中的一个 NSString 中时,正确的答案被存储了,\xa0 字符被删除了。猜猜我不应该只依赖调试器日志。

4

2 回答 2

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

\u00a0 将在编译时替换为实际的不间断空间。

于 2012-10-27T00:04:38.857 回答
1

在我看来,替换“\u00a0”不是一个通用的解决方案,因为 nect 时间服务器可能会发送任何其他 unicode 字符,然后代码将无法处理。“\u00a0”也不是一个字符串,它是一个字符。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]];
 } 
} 

//在上面的代码中,我解析了每个字符并检查它是否是一个数字,将它添加到一个数组中,因此该数组是免费的。PS:\U00a0 是一个字符

于 2013-03-25T09:03:27.123 回答