在我的代码中,我将此方法称为“词干”单词的预处理步骤:
public void getStem(String word)
{
WordnetStemmer stem = new WordnetStemmer( dict );
List<String> stemmed_words = stem.findStems(word, POS.VERB);
System.out.println( stemmed_words.get(0) );
}
通常,如果得到一个正常的单词,一切都很好(我使用 Java Wordnet 接口(interface)来处理词干)。事情是-->我并不总是得到一个正常的单词,我得到的东西是沿着isa
的思路的,它是is
和a
的连词。在这种情况下,该方法将返回 null,并且我的程序将崩溃。我该如何防御?
这就是我调用该代码的方式:
public Sentence(String verb, String object, String subject ) throws IOException
{
WordNet wordnet = new WordNet();
this.verb = verb;
this.object = object;
this.subject = subject;
wordnet.getStem( verb );
}
最终我希望读到:
this.verb = wordnet.getStem( verb );
我曾经听说过用 null 对象做一些事情,这适用于这里吗?
我尝试了这个,但没有成功,但是我想做这样的事情:
public void getStem(String word)
{
WordnetStemmer stem = new WordnetStemmer( dict );
List<String> stemmed_words = stem.findStems(word, POS.VERB);
if( stemmed_words != null)
System.out.println( stemmed_words.get(0) );
else
System.out.println( word );
}
这是输出:
prevent
contain
contain
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0
at java.util.Collections$EmptyList.get(Collections.java:4454)
at inference_learner.WordNet.getStem(WordNet.java:76)
at inference_learner.Sentence.<init>(Sentence.java:23)
at inference_learner.RegEx.match_regex_patterns(RegEx.java:33)
at inference_learner.ReadFile.readFile(ReadFile.java:30)
at inference_learner.Main.main(Main.java:38)
最佳答案
这不起作用,因为List
不是null
,List
是空的。
您必须像这样进行检查 if (stemmed_words.size() > 0)
关于java - 逻辑缺陷: if List<String> is null return input else print function output,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28229339/