0

我有以下 NSString ,然后我想将其分成两部分:

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

我想从中制作两个字符串,如下所示:

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:].

<您可以查找字符和>with的索引,并使用and-[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

如果你想在一行代码中做到这一点,这里是如何......

注意:我使用与您使用的完全相同的格式,使用正则表达式,非常成功地使用了它。在我看来,这有点简单,可以通过我的示例中所示的一行代码来实现。如果您的格式发生变化,您只需对正则表达式进行非常小的更改:

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]>”。但是,如前所述,任何格式更改都只是调整正则表达式的简单问题。

于 2013-02-26T17:19:11.627 回答
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 回答
1

根据您的要求,有不同的方法可以实现这一点,但是当您使用 时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

于 2013-02-26T16:57:45.877 回答