これを行うには多くの凝った方法がありますが、これは最も読みやすく理解しやすい方法の 1 つです (非常に簡単であるだけでなく)。
NSString *testData= @"Jim Bob Marcus Trent Mark\n\n"
"Megan Laurie Andrea Katherine\n"
"Dylan Liam Bernard\n"
"\n"
"Tim Thomas Britney Marcus";
// Remove duplicate spaces
while ([testData rangeOfString:@" "].location != NSNotFound)
testData = [testData stringByReplacingOccurrencesOfString:@" " withString:@" "];
// Remove duplicate newlines
while ([testData rangeOfString:@"\n\n"].location != NSNotFound)
testData = [testData stringByReplacingOccurrencesOfString:@"\n\n" withString:@"\n"];
NSLog(@"\n%@", testData);
// Results:
// Jim Bob Marcus Trent Mark
// Megan Laurie Andrea Katherine
// Dylan Liam Bernard
// Tim Thomas Britney Marcus
この回答からこの手法をコピーしたことに注意してください: https://stackoverflow.com/a/9715463/937822。
このソリューションが気に入ったら、彼の回答にも賛成票を投じてください。:)
これを行うためのより効率的な方法もあります。大量のデータを処理していて、パフォーマンスが十分でない場合は、個々の文字をループして、下位レベルの C 手法を使用して手動で文字列を処理するのがおそらく最も簡単でしょう。
NSString *testData= @"Jim Bob Marcus Trent Mark\n\n"
"Megan Laurie Andrea Katherine\n"
"Dylan Liam Bernard\n"
"\n"
"Tim Thomas Britney Marcus";
// Create our C character arrays
const char *sourceString = [testData UTF8String];
int len = strlen(sourceString);
char *destString = malloc(len * sizeof(char));
// Remove the duplicate spaces and newlines by not copying them into the destination character array.
char prevChar = 0;
int y = 0;
for (int i = 0; i < len; i++)
{
if (sourceString[i] == ' ' && prevChar == ' ')
continue;
if (sourceString[i] == '\n' && prevChar == '\n')
continue;
destString[y++] = sourceString[i];
prevChar = sourceString[i];
}
destString[y] = '\0';
// Create the new NSString object
NSString *trimmedString = [NSString stringWithUTF8String:destString];
// Free our memory
free(destString);
NSLog(@"\n%@", trimmedString);
// Results:
// Jim Bob Marcus Trent Mark
// Megan Laurie Andrea Katherine
// Dylan Liam Bernard
// Tim Thomas Britney Marcus