2011-07-07 33 views
4

我想将字符串文件逐行地导入到数组中。我想摆脱字符串前后的所有空白,这样我可以比较更容易的字符串,而不会因为空白的小的差异而不匹配。我的NSData的文件的内容,然后取这两个字符串Objective-C从数组中的字符串中删除空格

NSString* string = [[[NSString alloc] initWithBytes:[data bytes] 
                length:[data length] 
               encoding:NSUTF8StringEncoding] autorelease]; 

NSString* string2 = [[[NSString alloc] initWithBytes:[data2 bytes] 
                length:[data2 length] 
               encoding:NSUTF8StringEncoding] autorelease]; 

我下面尝试添加到阵列之前删除空格,但它似乎并没有工作。

NSString *newString = [string stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]]; 
NSString *newString2 = [string2 stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceCharacterSet]]; 

NSArray *fileInput = [newString componentsSeparatedByString:@"\n"]; 
NSArray *fileInput2 = [newString2 componentsSeparatedByString:@"\n"]; 

回答

1

在我看来像要删除从每行前和整个文件的后面而不是空白。尝试这样的事情;

NSArray *fileInput2 = [newString2 componentsSeparatedByString:@"\n"]; 
NSMutableArray *trimmedFileInput2 = [NSMutableArray array]; 
for(NSString *gak in fileInput2) { 
    [trimmedFileInput2 addObject:[gak stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
} 

[感谢@Deepak的评论,户外数字!]

+0

它不会取代现有的对象,会吗? –

6

如果你正在寻找替代空格的所有匹配,然后使用stringByTrimmingCharactersInSet:不会帮助,因为它只有在开始和结束剪掉字符串。您将需要使用stringByReplacingOccurrencesOfString:withString:方法来消除空白。

NSString * newString = [string stringByReplacingOccurrencesOfString:@" " withString:@""]; 
NSString * newString2 = [string2 stringByReplacingOccurrencesOfString:@" " withString:@""]; 

然而,

如果要修剪的阵列中的所有字符串,那么你将不得不枚举阵列和可变的新阵列添加修剪字符串。

+0

+1提到stringByTrimmingCharactersInSet:在这种情况下不会帮助 – Jasper

2

两个@Deepak和@Bill Dudney是正确的,我只是扔在另一种方式来解决问题:

NSMutableArray *fileInput = [NSMutableArray array]; 

[string enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) { 
    if ([line length] > 0) { 
     [fileInput addObject: 
      [line stringByTrimmingCharactersInSet: 
       [NSCharacterSet whitespaceCharacterSet]]; 
    } 
}]; 

(免责声明:工程在iOS 4以上,仅OS X 10.6以上版本..但我喜欢块!:))