0

我正在编写一种方法来搜索列表形式的单词文本文件,对于用户输入的单词,但如果找到一个字母,程序将返回肯定结果,例如,如果我搜索“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");
        }
    }
}
4

5 回答 5

1
if (indexfound>-1)
{ 
    JOptionPane.showMessageDialog(null, "Word was found");
}
 else if (indexfound<-1)
 {
    JOptionPane.showMessageDialog(null, "Word was not found");}
 }

这段代码的问题是它indexFound可以等于-1,但不能小于-1<将运算符更改为运算==符。

替代

这是检查 a 是否String存在于 another 中的一种相当晦涩的方法Stringmatches在 String 对象中使用该方法更为合适。这是文档

例子

就像是:

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.
 }
于 2013-04-07T16:44:03.020 回答
0

你说字母,你说单词,你到底搜索什么?

如果您搜索单词,则必须在单词边界内搜索单词: regex java.util.regex.Pattern \b 如anubhava所示。

您可以替换} else if (indexfound < -1) {为,} else {因为java.lang.indexOf()在未找到时返回 -1 >-1 否则,永远不会出现 < -1。

于 2013-04-07T16:42:44.167 回答
0

您的“else if”语句应为

} else if (indexfound == -1){

因为如果 indexOf 方法没有找到子字符串,它会准确返回 -1。

于 2013-04-07T16:45:02.120 回答
0

而不是这样的String#indexOf使用String#matches方法:

boolean matched = s.matches("\\b" + word + "\\b");

这将确保在带有单词边界的行中找到用户输入的单词。

顺便说一句,不清楚你为什么要声明words一个包含 500 个元素的字符串数组,你没有在任何地方使用它。

于 2013-04-07T16:41:00.097 回答
0

我发现您的代码中有一些令人困惑的地方。

  • 看起来您每个单词输出一次结果,而不是整个文件一次。
  • 当你有一本字典时,你通常每行只有一个单词,所以它要么匹配要么不匹配。看起来您(和大多数其他答案)试图在更长的字符串中找到这个词,这可能不是您想要的。如果您搜索“ee”,您不想在“啤酒”中找到它,对吧?

所以,假设字典是每行一个有效的单词,并且你不想在整个字典中的任何地方找到这个单词,这个简单的代码就可以解决问题。

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();
        }
    }
}
于 2013-04-07T17:05:16.127 回答