次の NSString があり、これを 2 つに分割します。
NSString *tmpString = @"Mike <test@gmail.com>";
次のような 2 つの文字列を作成します。
NSString *tmpString1 = @"Mike";
NSString *tmpString2 = @"test@gmail.com";
Objective-Cでこれを達成するにはどうすればよいですか? 前もって感謝します!
次の NSString があり、これを 2 つに分割します。
NSString *tmpString = @"Mike <test@gmail.com>";
次のような 2 つの文字列を作成します。
NSString *tmpString1 = @"Mike";
NSString *tmpString2 = @"test@gmail.com";
Objective-Cでこれを達成するにはどうすればよいですか? 前もって感謝します!
これはそれが行われる方法です、
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]];
やりたいことを実行するにはいくつかの方法があります。
空白 ( -[NSString componentsSeparatedByString:]
) で文字列を分割し、余分な部分を削除<
して、不要な>
ものを-[NSString stringByTrimmingCharactersInSet:]
.
と を使用して文字のインデックスを検索し、<
と>
を使用して部分文字列を-[NSString rangeOfString:]
コピーできます。-[NSString substringToIndex:]
-[NSString substringWithRange:]
別の方法は、次を使用することNSScanner
です。
NSScanner *scanner = [NSScanner scannerWithString:tmpString];
[scanner scanUpToString:@" <" intoString:&tmpString1];
[scanner scanUpToString:@">" intoString:&tmpString2];
これを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]>" という厳密な形式を使用することを前提としています。ただし、前述のように、形式の変更は、正規表現を微調整するだけの簡単な問題です。
要件に応じてこれを実現するさまざまな方法がありますが、 を使用するとオブジェクト nocomponentsSeparatedByString
が返され、その配列を使用してインデックス文字列を取得できます。NSArray
NSString
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 でした
次のように文字列を分割する必要があります。
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]];