2015-11-18 2 views
-1

Скажем, я получаю строку «123 4,56» из следующего кода (у меня есть русский локальный на данный момент, который имеет запятую как разделитель по умолчанию, а не точку), как мне удалите из него пространство, которое на самом деле является нерасширяющимся пространством и стандартным кодом, например [str stringByReplacingOccurrencesOfString: @ "" withString: @ ""]; не будет работать:NSString удалить не торможение

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:@""]; 
+0

'stringByTrimmingCharactersInSet:' будет делать это только в начале и в конце строки. – Larme

+0

Что возвращает эта строка? 'stringByReplacingOccurrencesOfString' – Nishant

+0

@Nishant возвращает исходную строку с пробелом – DarkAPI

ответ

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; 
} 

Будьте осторожны - если вы хотите поддерживать умножить локали - некоторые локали использует «» как разделитель, некоторые ','. Вы можете проверить это программно, если необходимо.

EDIT

Также обратите внимание, что IOS не использует пространство в качестве разделителя, но неразрывное пространства (U + 00A0) для localizedStringWithFormat: так, что это ваша проблема.

Надеюсь, это поможет.

+0

Спасибо @Doro Я думаю, что вы правы, сейчас я пытаюсь понять, как разбить это пространство без торможения – DarkAPI

+0

работает следующее: [str stringByReplacingOccurrencesOfString: @ "\ u00a0" withString: @ ""]; – DarkAPI

0

Первая линия должна работала

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

Но только в случае, если это не произошло, у меня есть еще один способ для вас:

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

ОБНОВЛЕНИЕ:

Вместо того, чтобы играть с локали вручную, вы должны использовать метод динамической локали для своего требования.

Заменить: [formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_UK"]];

By:

[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];    
[formatter setLocale:[NSLocale currentLocale]]; 
+0

Вы правы, мой плохой, можете ли вы посмотрите мой обновленный вопрос, пожалуйста, – DarkAPI

+0

Я пробовал свой код на iPhone 6 iOS 9.1 Simulator. Получил этот выход: 'Str Значение: 1,234.56 New Str Значение: 1,234.56' ЧТО ТАКОЕ ЖЕЛАТЕЛЬНЫЙ РЕЗУЛЬТАТ? – Nishant

+0

, пожалуйста, см. Мой ответ (раздел редактирования), который не является пробелом, то есть особым символом – Doro

Смежные вопросы