Подстрока Java с использованием lastindexOf возвращает определенную длину - PullRequest
0 голосов
/ 25 сентября 2018

Я использую JAVA, и у меня есть строка с именем example, которая выглядит следующим образом:

example = " id":"abcd1234-efghi5678""tag":"abc" "

ПРИМЕЧАНИЕ. Я не избежал использования "\", но вы поняли идею ...

... Я хочу просто вернуть;

abcd1234

... Я пытался использовать подстроку

example = (example.substring(example.lastIndexOf("id\":\"")+5));

(потому что эта строка могланаходиться где-нибудь в файле HTML / JSON), который вроде работает, и все, что делает lastIndexOf, - это находит его, а затем сохраняет все ПОСЛЕ него - т.е. оно возвращает;

abcd1234-efghi5678 "" tag ":" abc "

По сути, мне нужно найти lastIndexOf, основанный на строке, и ограничить его возвращение впоследствии - я обнаружил, что могу сделать это с помощью другой команды подстроки, подобной этой;

example = (example.substring(example.lastIndexOf("id\":\"")+5));
example = example.substring(0,8);

... но она выглядит грязной.Есть ли способ использовать lastIndexOf и одновременно установить максимальную длину - это, вероятно, что-то действительно простое, чего я не вижу из-за того, что смотрю на него так долго.

Заранее большое спасибо за вашепомощь!

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы можете использовать регулярное выражение для поиска определенной подстроки:

String regex = "^id[^a-z0-9]+([a-zA-Z0-9]+)-.*$";
Matcher p = Pattern.compile(regex).matcher(example);

String result = null;
if (p.matches()) {
    result = p.group(1);
}

System.out.println(result); //outputs exactly "abcd1234"

В шаблоне используется группа захвата, которая соответствует id, за которой следуют не алфавитно-цифровые символы и предшествующие -.

0 голосов
/ 25 сентября 2018

Не substring дважды.Вместо этого используйте найденный индекс дважды:

int idx = example.lastIndexOf("id\":\"");
example = example.substring(idx + 5, idx + 13);

Или, если длина является динамической, но всегда заканчивается -:

int start = example.lastIndexOf("id\":\"");
int end = example.indexOf('-', start);
example = example.substring(start + 5, end);

В реальном коде вы, конечно, должны всегдапроверьте, что подстрока вообще найдена, то есть, что idx / start / end не являются -1.

...