JAVA получает строку между первым и последним вхождением определенного символа - PullRequest
1 голос
/ 22 июня 2019

Если у меня есть эта строка:

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

Как мне сделать так, чтобы я получал только строку между первой открывающейся фигурной скобкой и последнейоткрывающаяся фигурная скобка

Как таковая:

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

Ответы [ 2 ]

2 голосов
/ 22 июня 2019

По умолчанию поиск выполняется жадно.Вы должны найти свой первый { без жадности (.*?), в то время как захват должен быть выполнен снова с жадностью (.*):

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

Полный код будет:

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 голос
/ 22 июня 2019

Вы можете просто использовать substring() метод с параметрами indexOf('{') и lastIndexOf('}'), как показано ниже:

yourString=yourString.substring(indexOf('{'),lastIndexOf('}'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...