Более одного индекса возможностей

Я ищу способ проанализировать подстроку с несколькими разными завершающими символами, которые можно было бы использовать. Должен ли я использовать другой метод или есть способ использовать регулярные выражения для сортировки символов?

Мой текущий код использует:

smallstring = bigstring.substring(bigstring.indexOf("starthere"), bigstring.indexOf("endhere"));

Последний индекс может быть "]" или ";" и мне нужно, чтобы синтаксический анализатор мог обнаруживать оба и завершать подстроку.


person Alex Bible    schedule 01.05.2013    source источник


Ответы (4)


Используйте String split() для этого, это правильный инструмент для работы:

String[] data = "a,b.c;d".split("[,.;]");

В приведенном выше примере строку с тремя разными разделителями (,.;) можно разделить с помощью одного регулярного выражения. Конечный результат, String[] с именем data, будет содержать все строки, разделенные разделителями:

[a, b, c, d]
person Óscar López    schedule 01.05.2013
comment
В итоге это сработало лучше всего и предоставило гораздо лучший метод разбора моей строки. Благодарю вас! - person Alex Bible; 01.05.2013

попробуй это

String smallstring = bigstring.replaceAll(".*starthere(.*)endhere.*", "$1");
person Evgeniy Dorofeev    schedule 01.05.2013

использовать регулярное выражение. Здесь вы можете протестировать его http://ocpsoft.org/tutorials/regular-expressions/java-visual-regex-tester/

person Boris Gavrilman    schedule 01.05.2013

Чтобы определить конечный индекс, вы можете написать

int endIndex = Math.min(bigstring.indexOf("]"), bigstring.indexOf(";"));
if(endIndex == -1) { endIndex = bigstring.length(); }
String smallString = bigstring.substring(startIndex, endIndex);
person Jared Nielsen    schedule 01.05.2013
comment
Это сработало бы, если бы после начального индекса были оба обозначенных символа, но оно выдавало исключение индекса за пределами границ, когда не могло исправить точку с запятой. Жаль, это был бы самый простой подход. Очень признателен :-) - person Alex Bible; 01.05.2013
comment
@AlexBible Я предполагал, что где-то в файле будет конечный символ. Если нет, приведенный выше (обновленный) код все равно будет работать без каких-либо исключений. - person Jared Nielsen; 01.05.2013