0

次の NSString があり、これを 2 つに分割します。

NSString *tmpString = @"Mike <test@gmail.com>";

次のような 2 つの文字列を作成します。

NSString *tmpString1 = @"Mike";
NSString *tmpString2 = @"test@gmail.com";

Objective-Cでこれを達成するにはどうすればよいですか? 前もって感謝します!

4

5 に答える 5

4

これはそれが行われる方法です、

NSArray *tmpArray = [@"Mike <test@gmail.com>" componentsSeparatedByString:@"<"];
NSString *tmpString1 = [tmpArray objectAtIndex: 0];
NSString *tmpString2 = [tmpArray objectAtIndex: 1];

tmpString2 = [tmpString2 stringByReplacingOccurrencesOfString:@">" withString:@""];
tmpString1 = [tmpString1 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
于 2013-02-26T16:47:07.503 に答える
2

やりたいことを実行するにはいくつかの方法があります。

空白 ( -[NSString componentsSeparatedByString:]) で文字列を分割し、余分な部分を削除<して、不要な>ものを-[NSString stringByTrimmingCharactersInSet:].

と を使用して文字のインデックスを検索し、<>を使用して部分文字列を-[NSString rangeOfString:]コピーできます。-[NSString substringToIndex:]-[NSString substringWithRange:]

別の方法は、次を使用することNSScannerです。

NSScanner *scanner = [NSScanner scannerWithString:tmpString];
[scanner scanUpToString:@" <" intoString:&tmpString1];
[scanner scanUpToString:@">" intoString:&tmpString2];
于 2013-02-26T16:58:09.130 に答える
2

これを1行のコードで実行したい場合は、次の方法があります...

注:正規表現を使用して、使用するのとまったく同じ形式を使用して、これを使用して大成功を収めました。私の意見では、これは少し単純で、私の例に示すように 1 行のコードで実現できます。フォーマットが変更された場合でも、正規表現にごくわずかな変更を加えるだけで済みます。

NSArray *nameComponents = [@"Mike <test@gmail.com>" componentsSeparatedByRegex:@"\\s<(.*)>"];
NSLog(@"included in nameComponents array: %@", nameComponents);

出力:

2013-02-26 11:34:55.238 TestProject[39086:1c403] nameComponents 配列に含まれています: (マイク、「test@gmail.com」)

もちろん、この例では、"[name][space]<[email]>" という厳密な形式を使用することを前提としています。ただし、前述のように、形式の変更は、正規表現を微調整するだけの簡単な問題です。

于 2013-02-26T17:19:11.627 に答える
1

要件に応じてこれを実現するさまざまな方法がありますが、 を使用するとオブジェクト nocomponentsSeparatedByStringが返され、その配列を使用してインデックス文字列を取得できます。NSArrayNSString

NSArray *mainStrArray = [str componentsSeparatedByString:@"<"];

これで、配列は値 Mike をインデックス 0 に、test@gmail.com> をインデックス 1 に格納します

// マイクを取得するには、その後の空白を削除するだけです

NSString *stringMike=[[mainStrArray objectAtIndex:0] stringByTrimmingCharactersInSet:
                          [NSCharacterSet whitespaceCharacterSet]];

// 他の部分をもう一度反復して、残りの文字列を取得します..

NSArray *tmpArray=[[mainStrArray objectAtIndex:1] componentsSepratedByString:@">"];

// インデックス 0 の test@gmail.com を取得します // 最初の部分を再度解析します

NSString *testStr=[tmpArray objectAtIndex:0];

以前にコメントで述べたように、他の代替手段はNSScanner でした

于 2013-02-26T16:57:45.877 に答える
1

次のように文字列を分割する必要があります。

NSString *tmpString = @"Mike <test@gmail.com>";

NSArray *breakIntoStrings=[tmpString componentsSeperatedByString:@"<"];
//[0]=Mike
//[1]=test@gmail.com>

NSString *tmpString1 = breakIntoStrings[0];
NSString *tmpString2 = [breakIntoStrings[1] substringToIndex:[breakIntoStrings[1] length] - 1];

//now tmpString1 contains white space at end. you can trim it by:

tmpString1 = [tmpString1 stringByTrimmingCharactersInSet:
                              [NSCharacterSet whitespaceCharacterSet]];
于 2013-02-26T16:55:06.250 に答える