如何在NSArray中删除NSString的前导和尾随空格?

sha*_*har 40 iphone objective-c nsstring nsarray

我有一个NSArray声明如下:

@property (nonatomic, strong) NSArray *arrayRefineSubjectCode;
Run Code Online (Sandbox Code Playgroud)

我手动填写数组元素如下:

     arrayRefineSubjectCode = [NSArray arrayWithObjects:
                              @"  BKKC 2061",
                              @"   BKKS 2631   ",
                              @"BKKS 2381      ",
                              nil];
Run Code Online (Sandbox Code Playgroud)

那么如何删除开始和结束的空格并使每个数组元素变为:

     arrayRefineSubjectCode = [NSArray arrayWithObjects:
                              @"BKKC 2061",
                              @"BKKS 2631",
                              @"BKKS 2381",
                              nil];
Run Code Online (Sandbox Code Playgroud)

我尝试使用"stringByTrimmingCharactersInSet:"但它只适用于NSString.有点困惑在这里.请帮忙...

Nik*_*uhe 75

NSArray和所包含的NSString对象都是不可变的.没有办法改变你拥有的对象.

相反,你必须创建新的字符串并将它们放在一个新的数组中:

NSMutableArray *trimmedStrings = [NSMutableArray array];
for (NSString *string in arrayRefineSubjectCode) {
    NSString *trimmedString = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    [trimmedStrings addObject:trimmedString];
}
arrayRefineSubjectCode = trimmedStrings;
Run Code Online (Sandbox Code Playgroud)

  • 您可以*将*替换为其他对象.你不能修改(不可变)`NSString`对象. (2认同)
  • 你将无法修改其中的字符串,因为它们是不可变的.您只能更改数组的内容...而不是内部字符串的内容 (2认同)
  • 一个问题:如果你还希望修剪换行符,你需要使用`[NSCharacterSet whitespaceAndNewlineCharacterSet]` (2认同)

onm*_*133 15

阅读http://nshipster.com/nscharacterset/

NSString -stringByTrimmingCharactersInSet:是一个你应该知道的方法.它最常传递NSCharacterSet + whitespaceCharacterSet或+ whitespaceAndNewlineCharacterSet,以便删除字符串输入的前导和尾随空格.

所以,在Swift 3中

let _ = " A B  C  ".trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) // A B  C
Run Code Online (Sandbox Code Playgroud)

  • 对于像我这样的懒人:theString = [theString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 应该做的伎俩,同时编辑相同的字符串. (11认同)