我已經NSString的下面,然後我想分成兩個:格式化的NSString在Objective-C
NSString *tmpString = @"Mike <[email protected]>";
我希望有兩個串出來的,將是這樣的:
NSString *tmpString1 = @"Mike";
NSString *tmpString2 = @"[email protected]";
我如何在Objective-C中實現這一點?提前致謝!
我已經NSString的下面,然後我想分成兩個:格式化的NSString在Objective-C
NSString *tmpString = @"Mike <[email protected]>";
我希望有兩個串出來的,將是這樣的:
NSString *tmpString1 = @"Mike";
NSString *tmpString2 = @"[email protected]";
我如何在Objective-C中實現這一點?提前致謝!
這是它是如何做,
NSArray *tmpArray = [@"Mike <[email protected]>" componentsSeparatedByString:@"<"];
NSString *tmpString1 = [tmpArray objectAtIndex: 0];
NSString *tmpString2 = [tmpArray objectAtIndex: 1];
tmpString2 = [tmpString2 stringByReplacingOccurrencesOfString:@">" withString:@""];
tmpString1 = [tmpString1 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
超級回答:) – 2013-02-26 17:11:41
沒有必要感謝,即使我解決了這個問題,但你的答案比我更好,比我短。 – 2013-02-26 17:15:28
此解決方案將失敗,並顯示如下字符串:'Mike Smith <[email protected]>'或地址行'test @ foo.com'。並非所有的電子郵件地址都有顯示名稱。 – rmaddy 2013-02-26 17:49:38
你需要打破的字符串:
NSString *tmpString = @"Mike <[email protected]>";
NSArray *breakIntoStrings=[tmpString componentsSeperatedByString:@"<"];
//[0]=Mike
//[1][email protected]>
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]];
有不同的方式來實現這一目標根據您的要求,但是當你使用componentsSeparatedByString
,它會返回一個NSArray
對象no NSString
,您可以使用該數組獲取索引字符串,
NSArray *mainStrArray = [str componentsSeparatedByString:@"<"];
現在你的陣列conatins值麥克指數在0和[email protected]>索引1
//用於獲取邁克,只是它
NSString *stringMike=[[mainStrArray objectAtIndex:0] stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]];
//迭代後移除空白再次,另一部分以獲得剩餘的字符串..
NSArray *tmpArray=[[mainStrArray objectAtIndex:1] componentsSepratedByString:@">"];
//你港島線得到索引0 [email protected] //再次解析其第一部分
01正如我在評論提到NSString *testStr=[tmpArray objectAtIndex:0];
其他替代早些時候NSScanner
有幾種方法可以做到你想要什麼。
您可以將字符串拆分爲空白(-[NSString componentsSeparatedByString:]
),然後修剪掉不需要的無關的<
和>
,使用-[NSString stringByTrimmingCharactersInSet:]
。
你可以查找字符<
和>
與-[NSString rangeOfString:]
和索引複製出來的子帶-[NSString substringToIndex:]
和-[NSString substringWithRange:]
。
另一種方法是使用NSScanner
:
NSScanner *scanner = [NSScanner scannerWithString:tmpString];
[scanner scanUpToString:@" <" intoString:&tmpString1];
[scanner scanUpToString:@">" intoString:&tmpString2];
如果你想這樣做,在一行代碼,這裏的如何...
注:我已經使用了巨大的成功使用此與使用正則表達式完全相同的格式。在我看來,這樣做更簡單一些,可以通過我的示例中所示的一行代碼來實現。如果您的格式更改過,你只需要進行非常小的改動你的正則表達式:
NSArray *nameComponents = [@"Mike <[email protected]>" componentsSeparatedByRegex:@"\\s<(.*)>"];
NSLog(@"included in nameComponents array: %@", nameComponents);
輸出:
2013年2月26日11:34:55.238 TestProject [39086:1c403 ]包括在nameComponents陣列:( 麥克, 「[email protected]」 )
的例子,當然,假定使用的「[名稱的嚴格的格式] [空間] <並[e郵件]>」。但是,正如所提到的,任何格式的改變都是調整正則表達式的簡單問題。
使用'NSString'的componentsSeparatedByString方法或使用[NSScanner](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSScanner_Class/Reference/Reference。 html) – nsgulliver 2013-02-26 16:45:43
請看這個鏈接。 http://stackoverflow.com/questions/3470756/split-one-string-into-different-strings – 2013-02-26 16:47:47
真正的問題是你是否想拆就空間還是要分析RFC-822(或更高版本)兼容的電子郵件地址。如果是後者,下面的答案都不是正確的。 – bbum 2013-02-26 21:43:28