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

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

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

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

Abcd1234

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

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

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

Abcd1234 - efghi5678 " " тег " : " а »

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

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

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

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

0
Codename21 25 Сен 2018 в 19:16

2 ответа

Лучший ответ

Не 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.

1
Andreas 25 Сен 2018 в 16:24

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

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
ernest_k 25 Сен 2018 в 16:45