1

余分な空白がある場合とない場合がある、フィルタリングされていない文字列があります。たとえば、次の文字列があります。

NSString *testData= @"Jim Bob Marcus Trent   Mark\n\n 
                     Megan Laurie Andrea Katherine\n 
                     Dylan                Liam     Bernard\n 
                                                           \n   
                     Tim Thomas Britney    Marcus";

これは、サーバーから受信した内容に応じたサンプル文字列です。文字列が完全な場合もあれば、予想よりも多くの空白がある場合もあります。基本的に、名前の間に通常の空白のみがあり、各行の最後に \n が 1 つだけあることを望みます。余分な空白 (通常のスペース以上) と複数の改行を削除するにはどうすればよいですか?

やってみた

stringReplaceOccurencesOfString 

しかし、それはすべてのケースを網羅しているわけではありません。

誰でも私を助けることができますか?ありがとうございました

4

2 に答える 2

3

これを行うには多くの凝った方法がありますが、これは最も読みやすく理解しやすい方法の 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
于 2013-05-21T03:53:03.307 に答える
0

NSRegularExpression または NSScanner を見てください。また、NSStringには次のメソッドが利用可能です

部分文字列の置換 – stringByReplaceingOccurrencesOfString:withString: – stringByReplaceingOccurrencesOfString:withString:options:range: – stringByReplaceingCharactersInRange:withString:

于 2013-05-20T06:07:25.383 に答える