2014-09-23 2 views
2

Я только что начал использовать регулярные выражения 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.

Цените свою помощь.

+0

Посмотрите на эту ссылку: http://stackoverflow.com/questions/4829908/replace-text-in-stringbuilder-via-regex Возможно, вам может помочь –

+0

Вы можете предоставить полный стек? – kofemann

+0

не используя скобки. * Нет * сделайте вас более умным. – drewmoore

ответ

1

t.length()-1 есть проблема. Что делать, если t пусто ""? , Вам необходимо сделать пустую и пустую проверку до того, как вы позвоните t.charAt()

+0

Спасибо за ответ, но это не сработало. Я редактировал свой пост с добавлением кода, который вы предложили, сообщите мне, если вы видите проблему сейчас. – Ozilophile

+0

@Ozilophile - можете ли вы дать полную программу ?. Что такое 'i', что такое' list'? – TheLostMind

+0

i - название продукта - пример - Samsung Galaxy S3 Mini (GT-i8190) Factory Unlocked International Version - WHITE. список LinkedList ключевых слов (строк) - пример - «плюс», «с» и т. Д. (Без кавычек, конечно). – Ozilophile

Смежные вопросы