逻辑缺陷:if List<String> is null return input else print function output

Logical flaw: if List<String> is null return input else print function output

在我的代码中,我调用此方法,作为 'stem' 个单词的预处理步骤:

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 接口来处理词干提取)。问题是 --> 我并不总能得到一个正常的词,有些东西我得到的是 isa,它是 isa 的连词。在这种情况下,该方法将 return 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 不是 nullList 是空的。 你必须像这样检查 if (stemmed_words.size() > 0)

尝试

if( stemmed_words != null && stemmed_words.size() > 0))
     System.out.println( stemmed_words.get(0) );
 else
     System.out.println( word );
}