Я только что начал использовать регулярные выражения Java на работе, и у меня возникли проблемы с использованием метода Matcher find().Метод-метод find() возвращает исключение StringOutOfBounds
В следующем коде i является параметром String, полученным от клиента, а «list» - это готовый связанный список со значениями String, и я хочу найти значение в списке, который отображается в i на наименьшем возможный индекс из всех других значений списка (если действительно есть совпадение). Значения в списке могут иметь звездочку в конце, что означает, что у них есть подстановочный знак, поэтому в конце есть 0 или более словных символов, поэтому я должен учитывать это при поиске в i. Вот код:
Pattern checkRegex;
int tStart = i.length();
for (String t : list){
if (t.charAt(t.length()-1) == '*')
checkRegex = Pattern.compile("\\W" + t + "[0-9A-Za-z]*\\W");
else
checkRegex = Pattern.compile("\\W" + t + "\\W");
Matcher regexMatcher = checkRegex.matcher(i);
if (regexMatcher.find()){
if (tStart > i.indexOf(regexMatcher.regionStart()))
tStart = i.indexOf(regexMatcher.regionStart());
}
я получаю ошибку - исключение в потоке «основной» java.lang.StringIndexOutOfBoundsException: индекс строки из диапазона: -1
После отладки, я обнаружил, что программа падает в команде regexMatcher.find(), но поскольку это логический метод, я не понимаю, что здесь должны делать индексы String.
Цените свою помощь.
Посмотрите на эту ссылку: http://stackoverflow.com/questions/4829908/replace-text-in-stringbuilder-via-regex Возможно, вам может помочь –
Вы можете предоставить полный стек? – kofemann
не используя скобки. * Нет * сделайте вас более умным. – drewmoore