【问题标题】:Separate digits in an NSString to display a phone numberNSString 中的分隔数字以显示电话号码
【发布时间】:2011-11-02 06:21:44
【问题描述】:

我有一个NSString,里面有这样的东西:

4434332124

我怎样才能把它变成这样的东西?

443-433-2124

【问题讨论】:

标签: objective-c ios cocoa-touch nsstring number-formatting


【解决方案1】:

这可以只用两行来完成,只需使用 NSString 的 stringWithFormat 方法并将电话号码分割成单独的子字符串,然后将整个内容粘合到您的格式字符串中。像这样的:

NSString *sPhone = @"4434332124";

NSString *formatted = [NSString stringWithFormat: @"%@-%@-%@", [sPhone substringWithRange:NSMakeRange(A,B)],[sPhone substringWithRange:NSMakeRange(B,C)],
                           [sPhone substringWithRange:NSMakeRange(C,D)]];

编辑:工作代码

NSString *formatted = [NSString stringWithFormat: @"%@-%@-%@", [sPhone substringWithRange:NSMakeRange(0,3)],[sPhone substringWithRange:NSMakeRange(3,3)],
                           [sPhone substringWithRange:NSMakeRange(6,4)]];

【讨论】:

  • 这个答案如何正确?什么是A,B,C,D???它甚至不编译。认真的人...
【解决方案2】:

如果您只想对确定为 10 位数字的数字进行简单的快速替换,请尝试此正则表达式示例 (iOS >= 3.2)。

NSString *tenDigitNumber = @"5554449999";
tenDigitNumber = [tenDigitNumber stringByReplacingOccurrencesOfString:@"(\\d{3})(\\d{3})(\\d{4})"
                                                           withString:@"$1-$2-$3"
                                                              options:NSRegularExpressionSearch
                                                                range:NSMakeRange(0, [tenDigitNumber length])];
NSLog(@"%@", tenDigitNumber);

【讨论】:

  • 投反对票有什么理由吗?它肯定比公认的答案更不容易出错。
【解决方案3】:

不如尝试用 NSFormatter 做一些事情(尽管除非你将它子类化,否则我没有看到一个明显的方法让它做像电话号码之类的事情)但你可以这样做:

NSString* newString = [NSString stringWithFormat:@"%c%c%c-%c%c%c-%c%c%c%c" [phoneNumber characterAtIndex:0],
        [phoneNumber characterAtIndex:1],
        [phoneNumber characterAtIndex:2],
        [phoneNumber characterAtIndex:3],
        [phoneNumber characterAtIndex:4],
        [phoneNumber characterAtIndex:5],
        [phoneNumber characterAtIndex:6],
        [phoneNumber characterAtIndex:7],
        [phoneNumber characterAtIndex:8],
        [phoneNumber characterAtIndex:9]];

【讨论】:

    【解决方案4】:
    #import <Foundation/Foundation.h>
    static NSString * const theInString = @"4434332124";
    
    int main (int argc, const char * argv[])
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
        const char      * theUniChar = theInString.UTF8String;
        NSMurableString * theResult = nil;
    
    
        for( int i = 0, c = (int)strlen(theUniChar); i < c; i+=2 )
        {
            char     thePart[4];
            sscanf( theUniChar + i, "%3s", &thePart );
            if( theResult == nil )
                theResult = [NSMutableString string];
            else
                [theResult appendFormate:@"-%3s",thePart];
        }
    
        printf( "%@\n", theResult );
    
        [pool drain];
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      相关资源
      最近更新 更多