重複した NSDecimalSeparator を削除するために、文字列内で NSScanner または for ループを使用しようとしています。どうやってするか?
注: NSDecimalSeparator は「単なるカンマ」ではありません。iOS の現在のローカリゼーションに応じて変更されます。したがって、重複する「カンマ」の検索を適用する実装は機能しません。
重複した NSDecimalSeparator を削除するために、文字列内で NSScanner または for ループを使用しようとしています。どうやってするか?
注: NSDecimalSeparator は「単なるカンマ」ではありません。iOS の現在のローカリゼーションに応じて変更されます。したがって、重複する「カンマ」の検索を適用する実装は機能しません。
NSDecimalSeparator
は非推奨です。使用することをお勧めしNSNumberFormatter
ます:
//getting default formatter
NSNumberFormatter* numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setFormatterBehavior: [NSNumberFormatter defaultFormatterBehavior]];
//creating two strings, one with single and one with double separator
NSString *separator = [numberFormatter decimalSeparator];
NSString *doubleSeparator = [NSString stringWithFormat:@"%@%@", separator, separator];
NSLog(@"decimal separator: %@", separator);
//creating example string
NSString *str = [NSString stringWithFormat:@"single: %@ double: %@", separator, doubleSeparator];
NSLog(@"example string: %@", str);
//replacing double separator with single separator
NSString *modified = [str stringByReplacingOccurrencesOfString: doubleSeparator withString:separator];
NSLog(@"modified string: %@", modified);
編集: 「23,45,67」文字列に関するコメントについては、次のとおりです。
NSString *str2 = @"23,45,67";
NSMutableArray *temp = [NSMutableArray arrayWithArray: [str2 componentsSeparatedByString:separator]];
NSString *last = [temp lastObject];
[temp removeLastObject];
NSString *newStr = [NSString stringWithFormat:@"%@%@%@", [temp componentsJoinedByString:@""], separator, last];
NSLog(@"result: %@", newStr);
編集 2: 最初のセパレーターのみを保持するコードは似ています:
NSMutableArray *temp2 = [NSMutableArray arrayWithArray: [str2 componentsSeparatedByString:separator]];
NSString *first = [temp2 objectAtIndex:0];
[temp2 removeObject:first];
NSString *newStr2 = [NSString stringWithFormat:@"%@%@%@", first, separator, [temp2 componentsJoinedByString:@""]];
NSLog(@"result2: %@", newStr2);