2016-12-26 2 views
0

Вот мой код для поиска смежных слов вокруг собственного существительного. Я получаю ошибку для этого кода, упомянутого ниже. Я попытался добавить различные перестановки и комбинации обратных косых черт и закрывающих скобок, но все равно получить ошибку. Полюбуется помощь.java.util.regex.PatternSyntaxException: Незакрытый класс символов рядом с индексом 44

for (String properNoun : properNouns){ 

      Pattern pattern = Pattern.compile("([^\\s]+\\s+[^\\s]+)\\s+"+properNoun+"\\s+([^\\s]+\\s+[^\\s]+)\\s+"); 
      Matcher matcher = pattern.matcher(sentence); 

      while (matcher.find()){ 
................ 

Ошибки я получаю:

Исключение в потоке "главный" java.util.regex.PatternSyntaxException:
Unclosed класс символов рядом с индексом 44
([^ \ s] + \ s + [^ \ s] +) \ s + [] \ s + ([^ \ s] + \ s + [^ \ s] +) \ s +

Речевые - Cyprium Mining рада сообщить о том, что на специальной встрече держателей долговых обязательств, состоявшихся 21 сентября 2016 года («Собрание»), держатели 750 000 долларов в основной сумме необеспеченных долговых обязательств с процентной ставкой в ​​размере 12% per_annum («Долговые обязательства») в подавляющем большинстве одобрили все представленные вопросы, включая продление срока действия maturity_date с 28 февраля 2017 года по 28 февраля 2019 года.

properNouns - [[], [Cyprium], [февраля], [Долговые обязательства], [сентября]]

+0

Это не давая мне никакого исключения ... могли бы вы поделиться значениями 'properNouns' и' предложение'? –

+0

Проверьте здесь: http://stackoverflow.com/questions/21816788/unclosed-character-class-error – Azodious

+1

Вы всегда должны [цитата] (https://docs.oracle.com/javase/8/docs/api/java /util/regex/Pattern.html#quote-java.lang.String-) такие строки. – Seelenvirtuose

ответ

3

properNoun значение [], это character class, она должна содержать некоторые символы , если вы хотите соответствовать [], вам следует избегать этого, например: \\[\\].

Как ваши данные, может быть, вы можете сделать это нравится:

Pattern pattern = Pattern.compile("([^\\s]+\\s+[^\\s]+)\\s+"+Pattern.quote(properNoun)+"\\s+([^\\s]+\\s+[^\\s]+)\\s+"); 

Pattern.quote:

Возвращает буквальную строку шаблона для заданной строки

+0

Я зацикливаюсь над собственными существительными, и они содержат символы. Обновлен вопрос, чтобы добавить эти значения. Первое значение в моем собственном наборе существительных является нулевым .. может ли это быть причиной ошибки? – serendipity

+0

@serendipity, возможно, вы можете использовать 'Pattern.quote', чтобы избежать str – chengpohi

+0

Он работает! Благодаря! – serendipity