我有以下 NSString ,然后我想将其分成两部分:
NSString *tmpString = @"Mike <test@gmail.com>";
我想从中制作两个字符串,如下所示:
NSString *tmpString1 = @"Mike";
NSString *tmpString2 = @"test@gmail.com";
如何在 Objective-C 中实现这一点?提前致谢!
我有以下 NSString ,然后我想将其分成两部分:
NSString *tmpString = @"Mike <test@gmail.com>";
我想从中制作两个字符串,如下所示:
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:]
.
<
您可以查找字符和>
with的索引,并使用and-[NSString rangeOfString:]
复制出子字符串。-[NSString substringToIndex:]
-[NSString substringWithRange:]
另一种方法是使用NSScanner
:
NSScanner *scanner = [NSScanner scannerWithString:tmpString];
[scanner scanUpToString:@" <" intoString:&tmpString1];
[scanner scanUpToString:@">" intoString:&tmpString2];
如果你想在一行代码中做到这一点,这里是如何......
注意:我使用与您使用的完全相同的格式,使用正则表达式,非常成功地使用了它。在我看来,这有点简单,可以通过我的示例中所示的一行代码来实现。如果您的格式发生变化,您只需对正则表达式进行非常小的更改:
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 数组中:(Mike,“test@gmail.com”)
当然,该示例假定您使用严格的格式“[name][space]<[email]>”。但是,如前所述,任何格式更改都只是调整正则表达式的简单问题。
您需要将字符串分解为:
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]];
根据您的要求,有不同的方法可以实现这一点,但是当您使用 时componentsSeparatedByString
,它会返回一个NSArray
对象 noNSString
并且您可以使用该数组来获取索引字符串,
NSArray *mainStrArray = [str componentsSeparatedByString:@"<"];
现在您的数组包含索引 0 处的值 Mike 和索引 1 处的 test@gmail.com>
// 为了得到麦克,只需删除它后面的空格
NSString *stringMike=[[mainStrArray objectAtIndex:0] stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]];
// 再次迭代另一部分以获得剩余的字符串..
NSArray *tmpArray=[[mainStrArray objectAtIndex:1] componentsSepratedByString:@">"];
// 你会得到 at index 0 test@gmail.com // 再次解析它的第一部分
NSString *testStr=[tmpArray objectAtIndex:0];
我之前在评论中提到的其他替代方案是NSScanner