【问题标题】:How can I separate this NSString?如何分离这个 NSString?
【发布时间】:2013-10-03 14:51:23
【问题描述】:

由于我无法获得分离解析字符串的逻辑

tooltipHtml:"(26.3 公里/29 分钟)"

我想删除除“26.3 km”和“29 mins”之外的其他部分。有时可以用“hrs-mins”代替“mins

【问题讨论】:

  • 你想要括号之间的部分吗?
  • 是的。只有 () 之间的部分

标签: ios objective-c nsstring nsarray


【解决方案1】:

使用 NSString componentsSeparatedByString: 方法将它们沿 "(" 、 "/" 和 ")" 分开

NSArray *components = [myString componentsSeparatedByString: @"("];
NSArray *componentsTwo = [[components objectAtIndex:1] componentsSeparatedByString: @"/"];
NSString *firstString = [componentsTwo objectAtIndex:0];
NSArray *componentsThree = [componentsTwo objectAtIndex:1] componentsSeparatedByString: @")"];
NSString *secondString = [componentsThree objectAtIndex:0];

或者你可以使用Regex方法,但是我对它们不是很熟悉,所以我不能告诉你具体怎么做,你必须看看周围。

【讨论】:

  • 这是一个非常低效的解决方案。最好获取“(”和“)”的范围,并简单地获取这些范围之间的子字符串。
  • 没错,但如果有什么不同(例如:T 而不是 t,它就不起作用)。
【解决方案2】:

如果你想改用 RegEx,你可以这样做:

NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:@"(?<=[(])[^)]*" options:nil error:nil];
NSArray *matches = [regEx matchesInString:str options:Nil range:NSMakeRange(0, str.length)];
for (NSTextCheckingResult *r in matches) {
    NSLog(@"%@", [str substringWithRange:r.range]);
}

输出:26.3 公里/29 分钟

或者,如果您希望将它们分开进一步使用:

NSRegularExpression *regEx = [[NSRegularExpression alloc] initWithPattern:@"(?<=[(|/])[^)|/]*" options:nil error:nil];
NSArray *matches = [regEx matchesInString:str options:Nil range:NSMakeRange(0, str.length)];
for (NSTextCheckingResult *r in matches) {
    NSLog(@"%@", [str substringWithRange:r.range]);
}

输出: 26.3公里 29 分钟

【讨论】:

    【解决方案3】:
    NSString *newString =[@"tooltipHtml:\" (26.3 km / 29 mins)\"" stringByReplacingOccurrencesOfString:@\"tooltipHtml:\""
                                     withString:@""];
    
    
    
        newString =[newString stringByReplacingOccurrencesOfString:@"("
                                     withString:@""];
    

    等等……

    (我可能有一些语法拼写错误,但你明白了,使用 stringByReplacingOccurrencesOfString 方法)

    【讨论】:

    • 除了使其余部分更难解析之外,还有什么作用?
    • 我认为在他离开的那一刻,字符串以26.3 km 开头。因此,您可以使用floatValue 并获得第一个号码。
    • @HotLicks 你是什么意思?问题表明他想删除 'tooltipHtml:"' 而不是解析数字
    • @HotLicks 实际上我不知道他想要什么。写得不好的问题
    • 上面的代码不会删除“tooltipHtml:”,即使那他想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多