NSString删除非制动空间

时间:2015-11-18 12:25:39

标签: ios objective-c nsstring

让我说我得到一个字符串" 123 4,56"从下面的代码(我现在有一个俄语本地的逗号作为默认分隔符而不是点),如何从中删除空间,实际上是一个非破坏空间和标准代码,如[str stringByReplacingOccurrencesOfString :@" " withString:@""];不会起作用:

NSString* amount = @"1234.56";
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_UK"]];
NSNumber *num = [formatter numberFromString:amount];
NSString* str = [NSString localizedStringWithFormat:@"%.2F", [num doubleValue]];
NSLog(@"Str Value: %@", str);
NSString *newStr = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"New Str Value: %@", newStr);

我得到的输出是:

Str Value: 1 234,56
New Str Value: 1 234,56

我试图解决的问题是我从服务器获取一个字符串(即123.45),我需要在UITextField中显示该字符串。问题是我不能只显示来自服务器的值,因为它取决于用户本地。如果用户有英国本地工作正常,但如果用户有俄语本地我需要显示逗号而不是点,因此基本上是上面的代码。然而,我得到的问题是,在将字符串从一个本地转换为另一个本地后,添加了一个令人讨厌的空间,我试图摆脱它。

基于Doro回答的解决方案

[str stringByReplacingOccurrencesOfString:@"\u00a0" withString:@""];

2 个答案:

答案 0 :(得分:0)

第一行应该有效

<>

但是如果它没有,我还有另一种方式:

NSString* newStr = [str stringByReplacingOccurrencesOfString:@" " withString:@""];

<强>更新

不应手动使用区域设置,而应根据需要使用动态区域设置方法。

替换:NSString* newStr2 = [[str componentsSeparatedByString:@" "] componentsJoinedByString:@""];

人:

[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_UK"]];

答案 1 :(得分:0)

听起来很奇怪,你确定那是空白角色吗?

我可以使用扫描仪提供此片段来标记输入字符:

- (NSString*)   stripInputValue:        (NSString*) inputValue
{
    NSMutableString *strippedString = [NSMutableString
                                       stringWithCapacity:inputValue.length];

    NSScanner *scanner = [NSScanner scannerWithString:inputValue];

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

    [formatter setLocale:[NSLocale currentLocale]];
    NSString *decimalSymbol = [formatter decimalSeparator];

    NSCharacterSet *validCharacters = [NSCharacterSet characterSetWithCharactersInString:[@"1234567890" stringByAppendingString:decimalSymbol]];

    while ([scanner isAtEnd] == NO) {
        NSString *buffer;
        if ([scanner scanCharactersFromSet:validCharacters intoString:&buffer]) {
            [strippedString appendString:buffer];

        } else {
            [scanner setScanLocation:([scanner scanLocation] + 1)];
        }
    }
    return strippedString;
}

小心 - 如果你想支持多重语言环境 - 某些语言环境使用'。'作为分隔符,一些','。如果需要,您可以通过编程方式进行检查。

修改

另请注意,iOS不使用空格作为分隔符,而是使用localizedStringWithFormat:的不间断空格(U + 00A0),这是您的问题。

希望这有帮助。