逻辑缺陷: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
,它是 is
和 a
的连词。在这种情况下,该方法将 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
不是 null
,List
是空的。
你必须像这样检查 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 );
}
在我的代码中,我调用此方法,作为 '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
,它是 is
和 a
的连词。在这种情况下,该方法将 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
不是 null
,List
是空的。
你必须像这样检查 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 );
}