2013-02-26 27 views
0

我已經NSString的下面,然後我想分成兩個:格式化的NSString在Objective-C

NSString *tmpString = @"Mike <[email protected]>"; 

我希望有兩個串出來的,將是這樣的:

NSString *tmpString1 = @"Mike"; 
NSString *tmpString2 = @"[email protected]"; 

我如何在Objective-C中實現這一點?提前致謝!

+1

使用'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

+1

請看這個鏈接。 http://stackoverflow.com/questions/3470756/split-one-string-into-different-strings – 2013-02-26 16:47:47

+1

真正的問題是你是否想拆就空間還是要分析RFC-822(或更高版本)兼容的電子郵件地址。如果是後者,下面的答案都不是正確的。 – bbum 2013-02-26 21:43:28

回答

4

這是它是如何做,

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]]; 
+0

超級回答:) – 2013-02-26 17:11:41

+0

沒有必要感謝,即使我解決了這個問題,但你的答案比我更好,比我短。 – 2013-02-26 17:15:28

+2

此解決方案將失敗,並顯示如下字符串:'Mike Smith <[email protected]>'或地址行'test @ foo.com'。並非所有的電子郵件地址都有顯示名稱。 – rmaddy 2013-02-26 17:49:38

1

你需要打破的字符串:

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]]; 
1

有不同的方式來實現這一目標根據您的要求,但是當你使用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

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]; 
2

如果你想這樣做,在一行代碼,這裏的如何...

注:我已經使用了巨大的成功使用此與使用正則表達式完全相同的格式。在我看來,這樣做更簡單一些,可以通過我的示例中所示的一行代碼來實現。如果您的格式更改過,你只需要進行非常小的改動你的正則表達式:

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郵件]>」。但是,正如所提到的,任何格式的改變都是調整正則表達式的簡單問題。

相關問題