读取文件的每一行并在java中搜索特定的单词

时间:2014-03-03 02:55:41

标签: java try-catch

所以我有一个分配,要求我“逐行搜索一个给定字符串的文件。输出必须包含行号和行本身,例如,如果单词文件被选中,输出看起来像

  

5:他有文件
  9:文件是他的

代码:

void Search(String input) throws IOException {
    int x = 1;
    FileReader Search = new FileReader(f);
    Scanner in = new Scanner(f);
    LineNumberReader L = new LineNumberReader(Search, x);
    StreamTokenizer token = new StreamTokenizer(Search);
    while (in.hasNextLine())
    {
        try
        {
            if (!in.findInLine(input).isEmpty())
            {
                display(Integer.toString(L.getLineNumber()) + ": " + L.readLine(), "\n");

                in.nextLine();
            }

        } catch (NullPointerException e)
        {
            System.out.println("Something Happened");
            in.nextLine();
        }
    }
}

到目前为止,我需要通过我的代码找出3个问题。

  1. 只要实例发生搜索不在一行中,它就会立即显示下一行,即使搜索到的单词不在行中,然后从那里终止,而不显示其余的行其中的一句话。
  2. 它应该显示带有单词的行,不管外壳,但不是。
  3. 最好是,它应该一次显示所有这些,而是​​逐行显示,直到它出错并终止。

1 个答案:

答案 0 :(得分:2)

你的主要问题是......

FileReader Search = new FileReader(f);
Scanner in = new Scanner(f);
LineNumberReader L = new LineNumberReader(Search, x);
StreamTokenizer token = new StreamTokenizer(Search);
while (in.hasNextLine())
{

你基本上打开了两个针对同一个文件的文件阅读器,但你似乎期望他们相互了解。您提前Scanner,但这对LineNumberReader没有影响。这会混淆报告和线条阅读过程。

Scanner阅读应该更像......

while (in.hasNextLine()) {
    String text = in.nextLine();

话虽如此,我实际上放弃Scanner支持LineNumberReader,因为它会为您提供更多有用的信息,否则您必须自己做。

例如......

FileReader Search = new FileReader(new File("TestFile"));
LineNumberReader L = new LineNumberReader(Search, x);

String text = null;
while ((text = L.readLine()) != null) {
    // Convert the two values to lower case for comparison...
    if (text.toLowerCase().contains(input.toLowerCase())) {
        System.out.println(L.getLineNumber() + ": " + text);
    }
}