在Objective-C中从字符串中移除空格

82
我有几个字符串。有些字符串开头有空格,有些没有。我想检查一个字符串是否以空格开头,如果是,则将其删除。

稍微搜索一下不会有坏处。看一下Cocoa Touch中从字符串中删除空格的最佳方法是什么? - Abizern
4个回答

230

NSString类中有一个方法可以实现这一功能。请查看stringByTrimmingCharactersInSet:(NSCharacterSet *)set。您应该将[NSCharacterSet whitespaceCharacterSet]作为参数使用:

NSString *foo = @" untrimmed string ";
NSString *trimmed = [foo stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

4
这也会修剪尾随的空格(这可能是需要的,也可能不需要。原始问题只要求从开头删除它)。 - lnafziger
2
stringByTrimmingCharactersInSet 只会移除字符串开头和结尾的字符,而不是中间的字符。如果您想要移除字符串中间的空格,请使用 [yourString stringByReplacingOccurrencesOfString:@" " withString:@""] - Arnab

79

您可以使用 NSString 的 stringByTrimmingCharactersInSet 方法,结合 NSCharacterSet 中的 whitespaceAndNewlineCharacterSet 来实现:

NSString *testString = @"  Eek! There are leading and trailing spaces  ";
NSString *trimmedString = [testString stringByTrimmingCharactersInSet:
                             [NSCharacterSet whitespaceAndNewlineCharacterSet]];

4
推荐使用whitespaceAndNewlineCharacterSet而不是只使用whitespaceCharacterSet,给你一个赞(+1)。 - Rik Smith-Unna
2
-1 给苹果公司,因为重新定义空白字符不包括换行符(他们应该创建一个新的 inlineWhitespaceCharacterSet)。 - AlexChaffee
这也将修剪尾随的空格(这可能是需要或不需要的。 (原始问题只要求从开头删除它)。 - lnafziger

8

这将仅删除前导空格。

NSString *myString = @"   123   ";
NSLog(@"mystring %@, length %d",myString, myString.length);
NSRange range = [myString rangeOfString:@"^\\s*" options:NSRegularExpressionSearch];
myString = [myString stringByReplacingCharactersInRange:range withString:@""];
NSLog(@"mystring %@, length %d",myString, myString.length);

输出

mystring    123   , length 9
mystring 123   , length 6

Ryan,感谢您回答原问题!!! - Lewis Edward Garrett

8
我写了一个快速宏,可以减少需要编写的代码量。
步骤1:编辑您的应用程序的PCH文件,该文件应命名为Project-Name-Prefix.pch。
#define TRIM(string) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]

步骤2:当您需要截取字符串时,享受写更少代码的乐趣。
NSLog(@"Output: %@ %@", TRIM(@"Hello        "), TRIM(@"World      "));

Output: Hello World

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接