如何在java中搜索文件中的单词

时间:2015-09-21 09:23:30

标签: java

我正在尝试在java中的文件中搜索字符串,这就是我试过的。在下面的程序中我得到输出为No Data Found,我确信该文件有我正在搜索的单词

import java.io.*;
import java.util.Scanner;

public class readfile {
    static String[] list;
    static String sear = "CREATE";

    public void search() {
        Scanner scannedFile = new Scanner("file.txt");

        while (scannedFile.hasNext()) {
            String search = scannedFile.next();
            System.out.println("SEARCH CONTENT:"+search);

            if (search.equalsIgnoreCase(sear)) {
                System.out.println("Found: " +search);
            } 
            else  {
                System.out.println("No data found.");
            }
        }
    }

    public static void main (String [] args) throws IOException {
        readfile read = new readfile();
        read.search();
    }
}

6 个答案:

答案 0 :(得分:0)

不要这样做:

search.equalsIgnoreCase(sear)

尝试:

search.toUpperCase().contains(sear)

我认为搜索是文件的整个字符串,所以你永远不会用等号来实现。

答案 1 :(得分:0)

好的,这是我对你的计划的理解。

您在文件file.txt中搜索单词CREATE。 为此,您需要阅读文件中的每个单词,如果是CREATE则打印Found create

此处的问题是,对于文件中的每个字词,如果不是CREATE,则会打印No data found

相反,您应该等待文件的结尾,然后如果您没有找到它,您将打印错误消息。

答案 2 :(得分:0)

使用nextLine()而不是next()然后使用split。像这样:

What's the difference between next() and nextLine() methods from Scanner class?

差异

next()只能读取输入直到空格。它无法读取由空格分隔的两个单词。此外,next()在读取输入后将光标放在同一行。

nextLine()读取包含单词之间空格的输入(即,读取直到行尾\ n)。读取输入后,nextLine()将光标定位在下一行。

使用以下代码:

   String search = scannedFile.nextLine();
   String[] pieces = data.split("\\s+");

  for(int i=0; i<pieces.length(); i++)
  {
          if(pieces[i].equalsIgnoreCase(sear))
        {
            System.out.println("Found: " +search);
        } 
        else 
        {
            System.out.println("No data found.");
        }
   }

答案 3 :(得分:0)

试试这个:

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class readfile {
    static String[] list;
    static String sear = "CREATE";

    public void search() throws IOException {

        List<String> saveAllLinesForRewriting = new ArrayList<String>();

        // Need to read file line by line
        BufferedReader bufferedReader = new BufferedReader(new FileReader("file.txt"));
        String saveLine;
        while ((saveLine = bufferedReader.readLine()) != null) {
            saveAllLinesForRewriting.add(saveLine);
        }
        bufferedReader.close();

        // Check if your word exists
        if (saveAllLinesForRewriting.toString().contains(sear)) {
            System.out.println("Found: " + sear);
        } else {
            System.out.println("No data found.");
        }
    }

    public static void main(String[] args) throws IOException {
        readfile read = new readfile();
        read.search();
    }
}

答案 4 :(得分:0)

不是使用扫描仪读取文件,而是首先通过添加以下行来创建要读取的文件资源

File file = new File("Full Path of file location");

Scannner scannedfile = new Scanner("file.txt");

并将上面的行更改为

Scanner scannedfile = new Scanner(file);

休息你的代码工作正常。

答案 5 :(得分:0)

问题是扫描程序正在扫描String“file.txt”而不是文件。

要解决这个问题,你必须做amit28所说的。您的最终代码如下

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;

public class readfile {
    static String[] list;
    static String sear = "CREATE";

    public void search() {

        File f = new File("file.txt");
        Scanner scannedFile;
        try {
            scannedFile = new Scanner(f);

            while (scannedFile.hasNext()) {
                String search = scannedFile.next();
                System.out.println("SEARCH CONTENT:"+search);

                if (search.equalsIgnoreCase(sear)) {
                    System.out.println("Found: " +search);
                } 
                else  {
                    System.out.println("No data found.");
                }
            }

        } catch (FileNotFoundException e) {
            // FIXME Auto-generated catch block
            e.printStackTrace();
        }






    }

    public static void main (String [] args) throws IOException {
        readfile read = new readfile();
        read.search();
    }
}