【发布时间】:2011-11-02 06:21:44
【问题描述】:
我有一个NSString,里面有这样的东西:
4434332124
我怎样才能把它变成这样的东西?
443-433-2124
【问题讨论】:
标签: objective-c ios cocoa-touch nsstring number-formatting
我有一个NSString,里面有这样的东西:
4434332124
我怎样才能把它变成这样的东西?
443-433-2124
【问题讨论】:
标签: objective-c ios cocoa-touch nsstring number-formatting
这可以只用两行来完成,只需使用 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)]];
【讨论】:
如果您只想对确定为 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);
【讨论】:
不如尝试用 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]];
【讨论】:
#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;
}
【讨论】: