逻辑缺陷:如果List <string>为null则返回输入else print function output </string>

时间:2015-01-30 04:40:52

标签: java null wordnet stemming data-processing

在我的代码中,我将此方法称为“阻止”单词的预处理步骤:

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接口来处理词干)。事情是 - &gt;我并不总能得到一个正常的词,有些事情我会得到isa这是isa的连词。在这种情况下,该方法将返回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)

2 个答案:

答案 0 :(得分:1)

由于List不是nullList为空,因此无法正常工作。 您必须像if (stemmed_words.size() > 0)

一样进行检查

答案 1 :(得分:0)

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