如何获得大括号之间的子串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获得大括号之间的子串?相关的知识,希望对你有一定的参考价值。

我有一个字符串。

NSString *myString = @"{53} balloons";

我如何获得子串53

答案
NSString *myString = @"{53} balloons";
NSRange start = [myString rangeOfString:@"{"];
NSRange end = [myString rangeOfString:@"}"];
if (start.location != NSNotFound && end.location != NSNotFound && end.location > start.location) {
    NSString *betweenBraces = [myString substringWithRange:NSMakeRange(start.location+1, end.location-(start.location+1))];
}

编辑:添加范围检查,thx到Keab42 - 好点。

另一答案

如果您不知道将有多少位数,但您知道它将始终用大括号括起来试试这个:

NSString *myString = @"{53} balloons";
NSRange startRange = [myString rangeOfString:@"{"];
NSRange endRange = [myString rangeOfString:@"}"];
if (startRange.location != NSNotFound && endRange.location != NSNotFound && endRange.location > startRange.location) {
    NSString *value = [myString substringWithRange:NSMakeRange(startRange.location,endRange.ocation - startRange.location)];
}

尽管如此,这可能是一种更有效的方法。

另一答案

这就是我做的。

NSString *myString = @"{53} balloons";
NSCharacterSet *delimiters = [NSCharacterSet characterSetWithCharactersInString:@"{}"];
NSArray *splitString = [myString componentsSeparatedByCharactersInSet:delimiters];
NSString *substring = [splitString objectAtIndex:1];

子串是53。

另一答案

您可以使用正则表达式来获取大括号之间的数字。它可能看起来有点复杂,但好的一面是它会找到多个数字并且数字的位置无关紧要。

Swift 4.2:

let searchText = "{53} balloons {12} clowns {123} sparklers"
let regex = try NSRegularExpression(pattern: "\{(\d+)\}", options: [])
let matches = regex.matches(in: searchText, options: [], range: NSRange(searchText.startIndex..., in: searchText))
matches.compactMap { Range($0.range(at: 1), in: searchText) }
       .forEach { print("Number: (searchText[$0])") }

Objective-C的:

NSString *searchText = @"{53} balloons {12} clowns {123} sparklers";

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\{(\d+)\}" 
                                                                       options:0 
                                                                         error:nil];

NSArray *matches = [regex matchesInString:searchText 
                                  options:0 
                                    range:NSMakeRange(0, searchText.length)];

for (NSTextCheckingResult *r in matches)
{
    NSRange numberRange = [r rangeAtIndex:1];
    NSLog(@"Number: %@", [searchText substringWithRange:numberRange]);
}

这将打印出来:

Number: 53
Number: 12
Number: 123
另一答案

试试这个代码。

 NSString *myString = @"{53} balloons";
 NSString *value = [myString substringWithRange:NSMakeRange(1,2)];
另一答案

对于Swift 2.1: -

var start = strData?.rangeOfString("{")
var end = strData?.rangeOfString("}")
if (start!.location != NSNotFound && end!.location != NSNotFound && end!.location > start!.location) {
    var betweenBraces = strData?.substringWithRange(NSMakeRange(start!.location + 1, end!.location-(start!.location + 1)))
    print(betweenBraces)
}
另一答案

我想,你正在寻找NSScanner课程,至少如果你正在解决一般情况。看看苹果documentation

另一答案

搜索“{”和“}”的位置。在这些索引之间取子串。

另一答案

检查任意数量的数据:

  NSString *str = @"{53} balloons";
    NSArray* strary = [str componentsSeparatedByString: @"}"];
    NSString* str1 = [strary objectAtIndex: 0];
    NSString *str2 = [str1 stringByReplacingOccurrencesOfString:@"{" withString:@""];
    NSLog(@"number = %@",str2);

另一种方法是

NSString *tmpStr = @"{53} balloons";
NSRange r1 = [tmpStr rangeOfString:@"{"];
NSRange r2 = [tmpStr rangeOfString:@"}"];
NSRange rSub = NSMakeRange(r1.location + r1.length, r2.location - r1.location - r1.length);
NSString *subString = [tmpStr substringWithRange:rSub];
另一答案

对于Swift 4.2:

if let r1 = string.range(of: "{")?.upperBound,
let r2 = string.range(of: "}")?.lowerBound {
    print (String(string[r1..<r2]))
}

以上是关于如何获得大括号之间的子串?的主要内容,如果未能解决你的问题,请参考以下文章

力扣每日一题——反转每对括号之间的子串

力扣每日一题——反转每对括号之间的子串

力扣每日一题——反转每对括号之间的子串

2021/5/26 刷题笔记反转每对括号间的子串

如何获得平衡括号之间的表达式

找出两个字符串中相同的子串,用java语言实现