【问题标题】:How to search a word in file in java如何在java中搜索文件中的单词
【发布时间】:2015-12-17 22:32:48
【问题描述】:

我正在尝试在 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();
    }
}

【问题讨论】:

  • 除非您更改了 Scanner 实例的分隔符模式,否则您的标记仍将包含逗号等内容。检查您的文件;它是否包含类似Create: 的内容?如果是这样,那将与您要查找的内容不匹配。使用search.toUpperCase().contains(sear)search.toUpperCase().indexOf(sear) > -1 查找您的单词。
  • 由于 Scanner 正在按顺序获取令牌,可能很少有令牌可能不包含“CREATE”,但正如您所提到的,某些令牌肯定会包含它,此外,正如 Tilo 指出的那样,您可以检查使用 contains(),而不是 equalsIgnoreCase()。

标签: java


【解决方案1】:

不要这样做:

search.equalsIgnoreCase(sear)

试试:

search.toUpperCase().contains(sear)

我认为搜索是文件的整个字符串,所以你永远不会使用 equals。

【讨论】:

    【解决方案2】:

    使用 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】:

      好的,这是我对你的程序的理解。

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

      这里的问题是,对于文件中的每个单词,如果不是CREATE,则打印No data found

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

      【讨论】:

        【解决方案4】:

        试试这个:

        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();
            }
        }
        

        【讨论】:

        • 只是观察; OP 尝试的解决方案会忽略大小写,而您的则不会
        【解决方案5】:

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

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

        之前

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

        并将上面的行更改为

        Scanner scannedfile = new Scanner(file);
        

        让你的代码正常工作。

        【讨论】:

          【解决方案6】:

          问题是扫描仪正在扫描字符串“file.txt”而不是文件。

          要解决这个问题,您必须按照 amit28 所说的去做。你的finally代码如下

          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();
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2011-04-21
            • 2022-12-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-12
            相关资源
            最近更新 更多