Простой код в Lucene 4.1, бросающий исключение NullPointerException

Tokenizer tokenizer 
           = new org.apache.lucene.analysis.standard.StandardTokenizer
                                    (Version.LUCENE_41,new StringReader("!!!"));
tokenizer.incrementToken();

Броски

java.lang.NullPointerException
    at org.apache.lucene.analysis.standard.std34.StandardTokenizerImpl34.zzRefill(StandardTokenizerImpl34.java:812)
    at org.apache.lucene.analysis.standard.std34.StandardTokenizerImpl34.getNextToken(StandardTokenizerImpl34.java:1019)
    at org.apache.lucene.analysis.standard.StandardTokenizer.incrementToken(StandardTokenizer.java:180)

Этот код работал нормально с Lucene 36, почему он исправляет исключение

0
nl ja de

2 ответы

У меня была такая же проблема, как и у вас (например, NullPointerException после обновления до версии 4.1 из 3.6), хотя я использую org.apache.lucene.analysis.TokenStream . После копания в источнике Lucene я обнаружил, что вызов метода reset перед вызовом incrementToken устраняет проблему.

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

https://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/api/all/org/apache/lucene/analysis/standard/StandardTokenizer.html#reset (java.io.Reader)

2
добавлено
Спасибо, это было решение
добавлено автор Paul Taylor, источник

Возможно, вы заменили текст, переданный StringReader в вашем производственном коде, когда вы разместили его здесь, но "!!!" кажется чем-то, что может привести к странному поведению для меня. Поскольку строка является полностью пунктуацией, я не верю, что там есть какие-то маркеры для ее потребления. Я честно не уверен, что .incrementToken() должен делать при вызове с входом, в котором нет токенов.

Вы пробовали его с помощью ввода с действительными токенами?

0
добавлено
Конечно, он не создавал токен, но incrementToken() должен просто возвращать false, а не исключать исключение, дело в том, что этот тестовый файл работает с Lucene 3.6
добавлено автор Paul Taylor, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async