如何使用NSNumberFormatter向NSString插入空格?

时间:2013-01-16 13:36:47

标签: ios objective-c

我想写一个UITextField,可以将号码自动格式化为银行号码。

例如:输入1234567890098765将自动显示为1234 5678 9009 8765

我会使用textFieldDelegate来执行此操作,但我不知道如何使用NSNumberFormatter

我该怎么做?

3 个答案:

答案 0 :(得分:9)

使用NSNumberFormatter很简单。

NSNumber *number = [NSNumber numberWithLongLong:1234567890098765];
NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setUsesGroupingSeparator:YES];
[formatter setGroupingSize:3];
// [formatter setGroupingSeparator:@"\u00a0"];
NSString *string = [formatter stringFromNumber:number];

我故意评论了设置格式化程序分组分隔符的行,因为最好使用默认的一个,这是由用户的语言环境提供的(例如美国的,,德国的.瑞士的'。另请注意,iOS不使用空格作为分隔符,而是使用不间断的空格(U+00A0)。

答案 1 :(得分:0)

试试这个: -

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

   NSString *text = [textField text];

    NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789\b"];
    string = [string stringByReplacingOccurrencesOfString:@" " withString:@""];
    if ([string rangeOfCharacterFromSet:[characterSet invertedSet]].location != NSNotFound) {
        return NO;
    }

    text = [text stringByReplacingCharactersInRange:range withString:string];
    text = [text stringByReplacingOccurrencesOfString:@" " withString:@""];

    NSString *newString = @"";
    while (text.length > 0) {
        NSString *subString = [text substringToIndex:MIN(text.length, 4)];
        newString = [newString stringByAppendingString:subString];
        if (subString.length == 4) {
            newString = [newString stringByAppendingString:@" "];
        }
        text = [text substringFromIndex:MIN(text.length, 4)];
    }

    newString = [newString stringByTrimmingCharactersInSet:[characterSet invertedSet]];

    if (newString.length >= 20) {
        return NO;
    }

    [textField setText:newString];

    return NO;
    }

希望这可以帮助你..

答案 2 :(得分:0)

我有一个c ++解决方案,也许你可以将你的字符串改为cstring然后改回来

char s[50]={'\0'},ch[99]={'\0'};
int i,j,k,len;
printf("input a string:\n");
scanf("%s",s);
len=strlen(s);
k=0;
for(i=0;i<len;i+=4)
{
    for(j=0;j<4;j++)
    {
        *(ch+k)=*(s+i+j);
        k++;

    }
        *(ch+k)=' ';
        k++;
}
printf("%s\n",ch);