【发布时间】:2011-04-09 03:22:36
【问题描述】:
我有一个字符串0023525631,但我想要的是字符串23525631——没有前导零。我该怎么做?
【问题讨论】:
-
有关执行此操作的各种方法(以及每种方法的示例代码)的比较,请参阅此答案:stackoverflow.com/a/13355703/937822
标签: objective-c string cocoa nsstring
我有一个字符串0023525631,但我想要的是字符串23525631——没有前导零。我该怎么做?
【问题讨论】:
标签: objective-c string cocoa nsstring
像这样使用正则表达式,
NSString *str =@"000034234247236000049327428900000";
NSRange range = [str rangeOfString:@"^0*" options:NSRegularExpressionSearch];
str= [str stringByReplacingCharactersInRange:range withString:@""];
NSLog(@"str %@",str);
O/P:-str 34234247236000049327428900000
【讨论】:
如果你是数字,你可以将字符串转换为整数和整数到字符串。
或者
声明指向此字符串的指针并将此指针设置为字符串的开头,然后迭代您的字符串并在此指针中添加字符串开头的零个数。然后你有一个指向在零之前开始的字符串的指针,你必须使用指针来获取不带零的字符串,如果你使用字符串,你可以获得带零的字符串。
或者
你可以反转字符串,并从反向迭代它,如果你得到一些char != '0'你停止迭代,否则你把这个字符重写为空。在它之后,您可以反转字符串以在字符串中取回您的整数而不带前导零。
【讨论】:
这正是NSNumberFormatter 的用途(而且做得更好)。为什么要重新发明轮子?
【讨论】:
你可以用这个:
NSString *testStr = @"001234056";
testStr = [NSString stringWithFormat:@"%d",[testStr intValue];
【讨论】:
我在这里假设您只想删除前导零。 IE。 @"*00*1234*0*56" 变为 @"1234*0*56",而不是 @"123457"。为此,我会使用 NSScanner。
// String to strip
NSString *test = @"001234056";
// Skip leading zeros
NSScanner *scanner = [NSScanner scannerWithString:test];
NSCharacterSet *zeros = [NSCharacterSet
characterSetWithCharactersInString:@"0"];
[scanner scanCharactersFromSet:zeros intoString:NULL];
// Get the rest of the string and log it
NSString *result = [test substringFromIndex:[scanner scanLocation]];
NSLog(@"%@ reduced to %@", test, result);
【讨论】:
没有正则表达式
func trimLeadingZeroes(input: String) -> String {
var result = ""
for character in input.characters {
if result.isEmpty && character == "0" { continue }
result.append(character)
}
return result
}
使用正则表达式
func trimLeadingZeroes(input: String) -> String {
return input.stringByReplacingOccurrencesOfString(
"^0+(?!$)",
withString: "",
options: .RegularExpressionSearch,
range: Range(start: input.startIndex, end: input.endIndex)
)
}
【讨论】:
无需像其他答案那样复杂。
这样简单的事情就足够了。
while ([string hasPrefix:@"0"]) {
string = [string substringFromIndex:1];
}
注意事项:
•如果您的字符串编号类似于0.12,您将留下.12。如果不需要,则只需检查 hasPrefix:@"." 并与前置 @"0" 连接。
•如果您的字符串编号只是0,您将一无所有。如果不需要,则只需检查 isEqualToString:@"" 并设置为 @"0"
•如果速度对您来说真的很重要,您可以在达到非零值时遍历字符 (scan) 和 break;(在 index n),那么你只需 substringFromIndex:n
【讨论】:
更好的方法是写一个可以随时使用的函数。
-(NSString *)trimZero:(NSString*)inputString {
NSScanner *scanner = [NSScanner scannerWithString:inputString];
NSCharacterSet *zeros = [NSCharacterSet
characterSetWithCharactersInString:@"0"];
[scanner scanCharactersFromSet:zeros intoString:NULL];
return [inputString substringFromIndex:[scanner scanLocation]];
}
用法:
NSString *newString = [self trimZero:yourString];
【讨论】:
这是一个基于 C 字符串的实现。
char *cstr = [string UTF8String];
while (*cstr == '0')
++cstr;
return [NSString stringWithUTF8String:cstr];
当然,这也不会跳过前导空格,而 NSScanner(默认情况下)会。
【讨论】: