给定字符串输入:
@"bonus pay savings 2.69 F";
@"brick and mortar 0.15-B";所需的输出字符串:
[@"bonus pay savings", @"2.69 F"];
[@"brick and mortar", @"0.15-B"];我尝试过这种方法:
NSString * str = @"bonus pay savings 2.69 F";
NSArray * arr = [str componentsSeparatedByString:@" "];
NSLog(@"Array values are : %@",arr);但我的方法的缺点是我使用3个空格作为分隔符,而空格的数量可以改变。如何才能做到这一点?谢谢。
发布于 2018-06-16 02:32:54
一个使用正则表达式的简单解决方案。
它将所有出现2个或更多({2,})空白字符(\\s)替换为随机的UUID字符串。然后,它将字符串拆分为该UUID字符串。
NSString *separator = [NSUUID UUID].UUIDString;
NSString *string = @"bonus pay savings 2.69 F";
NSString *collapsedString = [string stringByReplacingOccurrencesOfString:@"\\s{2,}"
withString:separator
options:NSRegularExpressionSearch
range:NSMakeRange(0, [string length])];
NSArray *output = [collapsedString componentsSeparatedByString:separator];
NSLog(@"%@", output);发布于 2018-06-16 02:39:20
您可以使用NSRegularExpression拆分字符串。让我们在NSString上创建一个类别
NSString+asdiu.h
@interface NSString (asdiu)
- (NSArray<NSString *> *)componentsSeparatedByRegularExpressionPattern:(NSString *)pattern error:(NSError **)errorOut;
@endNSString+asdiu.m
@implementation NSString (asdiu)
- (NSArray<NSString *> *)componentsSeparatedByRegularExpressionPattern:(NSString *)pattern error:(NSError **)errorOut {
NSRegularExpression *rex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:errorOut];
if (rex == nil) { return nil; }
NSMutableArray<NSString *> *components = [NSMutableArray new];
__block NSUInteger start = 0;
[rex enumerateMatchesInString:self options:0 range:NSMakeRange(0, self.length) usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {
NSRange separatorRange = result.range;
NSRange componentRange = NSMakeRange(start, separatorRange.location - start);
[components addObject:[self substringWithRange:componentRange]];
start = NSMaxRange(separatorRange);
}];
[components addObject:[self substringFromIndex:start]];
return components;
}
@end你可以这样使用它:
NSArray<NSString *> *inputs = @[@"bonus pay savings 2.69 F", @"brick and mortar 0.15-B"];
for (NSString *input in inputs) {
NSArray<NSString *> *fields = [input componentsSeparatedByRegularExpressionPattern:@"\\s\\s+" error:nil];
NSLog(@"fields: %@", fields);
}输出:
2018-06-15 13:38:13.152725-0500 test[23423:1386429] fields: (
"bonus pay savings",
"2.69 F"
)
2018-06-15 13:38:13.153140-0500 test[23423:1386429] fields: (
"brick and mortar",
"0.15-B"
)发布于 2018-06-16 07:01:13
如果您可以假设输入字符串中只有2个字段,我将使用一个有限的split方法like this one,它总是返回一个包含2个项目的数组,然后使用stringByTrimmingCharactersInSet“修剪”第二个项目的空格。
https://stackoverflow.com/questions/50880909
复制相似问题