我正在编写一种方法来搜索列表形式的单词的文本文件,对于用户输入的单词,但是如果找到一个字母,程序将返回肯定的结果,例如,如果我搜索“f”如果没有
,它将返回字典中有一个单词“F”public static void Option3Method(String dictionary) throws IOException {
Scanner scan = new Scanner(new File("wordlist.txt"));
String s;
String words[] = new String[500];
String word = JOptionPane.showInputDialog("Enter a word to search for");
while (scan.hasNextLine()) {
s = scan.nextLine();
int indexfound = s.indexOf(word);
if (indexfound > -1) {
JOptionPane.showMessageDialog(null, "Word was found");
} else if (indexfound < -1) {
JOptionPane.showMessageDialog(null, "Word was not found");
}
}
}
答案 0 :(得分:1)
if (indexfound>-1)
{
JOptionPane.showMessageDialog(null, "Word was found");
}
else if (indexfound<-1)
{
JOptionPane.showMessageDialog(null, "Word was not found");}
}
此代码存在的问题是indexFound
可能等于-1
,但绝不会低于-1
。更改<
运算符的==
运算符。
替代
这是一种非常模糊的方法,用于检查另一个String
中是否存在String
。在String对象中使用matches
方法更合适。这是documentation。
实施例
类似的东西:
String phrase = "Chris";
String str = "Chris is the best";
// Load some test values.
if(str.matches(".*" + phrase + ".*")) {
// If str is [something] then the value inside phrase, then [something],true.
}
答案 1 :(得分:0)
而不是String#indexOf
使用String#matches
这样的方法:
boolean matched = s.matches("\\b" + word + "\\b");
这将确保在带有单词边界的行中找到用户输入的单词。
btw不清楚你为什么声明words
一个包含500个元素的String数组,你没有在任何地方使用它。
答案 2 :(得分:0)
你说信,你说的话,你究竟搜索什么?
我搜索单词时,您必须在单词边界内搜索单词:正则表达式java.util.regex.Pattern \ b,如anubhava所示。
您可以将} else if (indexfound < -1) {
替换为} else {
,因为java.lang.indexOf()在找不到时返回-1&gt; -1否则,&lt; -1永远不会发生。
答案 3 :(得分:0)
您的“else if”语句应为
} else if (indexfound == -1){
因为如果没有找到子字符串,indexOf方法将返回-1。
答案 4 :(得分:0)
我发现你的代码中有一些令人困惑的事情。
因此,假设字典是每行一个有效字,并且你不想在整个字典中的任何地方找到这个单词,这个简单的代码就可以了。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws FileNotFoundException {
Scanner scanner = new Scanner(new File("wordlist.txt"));
String word = "Me";
try {
while (scanner.hasNextLine()) {
if (scanner.nextLine().equalsIgnoreCase(word)) {
System.out.println("word found");
// word is found, no need to search the rest of the dictionary
return;
}
}
System.out.println("word not found");
}
finally {
scanner.close();
}
}
}