Hillary Franks
Hillary Franks

Reputation: 41

Objective-C removing whitespace from strings in array

I want to import a file of strings line by line into an array. I want to get rid of all of the whitespace before and after the strings so that I can compare the strings a lot easier without having them not match due to small whitespace discrepancies. I NSData the content of the files then take the two strings

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];

I tried below to remove the whitespace before adding to an array but it does not seem to work.

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

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

Upvotes: 4

Views: 5513

Answers (3)

octy
octy

Reputation: 6545

Both @Deepak and @Bill Dudney being right, I'm just throwing in another way to solve your problem:

NSMutableArray *fileInput = [NSMutableArray array];

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

(Disclaimer: Works in iOS 4+, OS X 10.6+ only... but I love blocks! :))

Upvotes: 1

Bill Dudney
Bill Dudney

Reputation: 3358

Looks to me like you are removing the white space from the front and back of the whole file but not from each line. Try something like this;

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

[Thanks @Deepak for the comment, dooh!]

Upvotes: 2

Deepak Danduprolu
Deepak Danduprolu

Reputation: 44633

If you are looking at substituting all occurrences of whitespace then using stringByTrimmingCharactersInSet: won't help as it only trims off at the start and end of the string. You will need to use the stringByReplacingOccurrencesOfString:withString: method to eliminate the whitespace.

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

However,

If you want to trim all the strings in the array then you will have to enumerate the array and add the trimmed strings in a new mutable array.

Upvotes: 6

Related Questions