JAVA在特定字符的第一次出现和最后一次出现之间获取字符串

时间:2019-06-22 01:16:13

标签: java regex

假设我有这个字符串:

mystring
{
    a : 1
    b : 2
    c : { e :f}
    d : x
}

该如何执行,这样我将只获得第一个打开的花括号和最后一个打开的花括号之间的字符串

因此:

    a : 1
    b : 2
    c : { e :f}
    d : x

2 个答案:

答案 0 :(得分:2)

默认情况下,搜索是贪婪完成的。您需要非贪婪地找到第一个{.*?),而捕获应该再次贪婪地进行(.*):

".*?\{(.*)\}.*"

完整代码为:

String s = // your input string
Pattern p = Pattern.compile(".*?\\{(.*)\\}.*");
Matcher m = p.matcher(s);
if (m.find()) {
    System.out.println(m.group(1));
}

您也可以使用普通的String方法,而无需使用正则表达式来执行相同的操作:

int start = s.indexOf("{") + 1;
int end = s.lastIndexOf("}");
if (start > -1 && end > start) {
    System.out.println(s.substring(start, end));
}

答案 1 :(得分:1)

您可以简单地将substring()方法与参数indexOf('{')lastIndexOf('}')一起使用,如下所示:

yourString=yourString.substring(indexOf('{'),lastIndexOf('}'));