该程序是一个文本引擎,可以接收文本文件并对其进行分析。
public Word findFirst(String text) throws SearchableException, ContentNotLoadedException {
for(int i = 0;i<words.size();i++) {
if(text.equals(words.get(i).text)) {
return words.get(i).text;
}
}
}
这是一种应返回与输入“文本”匹配的单词的第一个实例的方法。 “单词”是加载所有单词的数组列表。我在return语句中收到“无法从字符串转换为单词”的错误,虽然我理解该错误,但我无法想到执行此操作的另一种方法?
public class Word {
public final String text;
public final int position;
public final int length;
public final int line;
public final int positionInLine;
public Word(String text, int position, int length, int line, int positionInLine) {
this.text = text;
this.position = position;
this.length = length;
this.line = line;
this.positionInLine = positionInLine;
}
这是有问题的Word类。
编辑:我无法以任何方式更改方法签名或Word类。
答案 0 :(得分:2)
如果您使用的是Java-8,则可以使用它返回匹配的第一个字符串:
public String findFirst(String text) throws SearchableException {
return words.stream().filter(i -> i.text.equals(text)).findFirst().get().text;
}
或者,如果您想返回整个对象,则可以使用:
public Word findFirst(String text) throws SearchableException {
return words.stream().filter(i -> i.text.equals(text)).findFirst().get();
}
答案 1 :(得分:1)
实际上,该方法的返回类型为Word
,因此当您的return
给出String
时,它不能从String
到Word
。 / p>
要解决此问题,请将返回类型更改为String
public String findFirst(String text) throws SearchableException, ContentNotLoadedException {
for(int i = 0;i<words.size();i++) {
if(text.equals(words.get(i).text)) {
return words.get(i).text;
}
}
}
或返回整个Word
对象
public Word findFirst(String text) throws SearchableException, ContentNotLoadedException {
for(int i = 0;i<words.size();i++) {
if(text.equals(words.get(i).text)) {
return words.get(i);
}
}
}
提示以简化循环
foreach
循环
for (Word word : words) {
if (text.equals(word.text)) {
return word.text;
}
}
流
return words.stream().map(Word::getText).filter(text::equals).findFirst().orElseThrow(()->new SearchableException());
答案 2 :(得分:1)
只需return words.get(i)
即可代替return words.get(i).text
。
public Word findFirst(String text) throws SearchableException, ContentNotLoadedException {
for(int i = 0;i<words.size();i++) {
if(text.equals(words.get(i).text)) {
return words.get(i);
}
}
return null;
}
答案 3 :(得分:0)
由于不能更改方法签名,因此必须返回Word实例。因此,您不应返回Word.text,而应直接返回Word实例或新的实例。