搜索文本文件

时间:2013-04-07 16:37:34

标签: java file search text

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

5 个答案:

答案 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)

我发现你的代码中有一些令人困惑的事情。

  • 看起来您每个单词输出一次结果,而不是整个文件输出一次。
  • 当你有一本词典时,你通常每行只有一个单词,所以它会匹配或不匹配。看起来你(以及大多数其他答案)试图在更长的String中找到这个词,这可能不是你想要的。如果你搜索'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();
        }
    }
}