Java检查文本文件中的每一行字符串,并搜索字符串是否存在

时间:2013-11-30 22:20:30

标签: java

你好我正在研究一个程序来检查文本文件中的每一行单词并查看它们是否存在

  

执行的例子

     

输入要搜索的单词:taco

     

发现了'taco'字样。

     

输入要搜索的单词:asd

     

找不到单词'asd'。

这是作业的说明

  

编写一个程序,从文件中读取100个单词。然后,有用户   搜索一个单词,直到他们进入'退出'。该程序将读入   从文件100个单词。该文件可能包含也可能不包含100个单词   但是数组最多应该保持100(如果列表不包含   足够的话,用空字符串填充数组的其余部分)。后   读入文件后,程序会提示用户进行搜索   串。然后程序将搜索字符串并告诉用户   如果找到这个词的话。该计划将继续进行搜索   来自用户的字符串,直到用户输入“退出”

到目前为止我的代码是非常不完整的

我需要建议或建议我还需要添加/修复

谢谢你!

import java.io.*;
import java.util.Scanner;
public class project2 {
  public static void main( String[] args ) throws IOException {
    String[] list;
    String  search = "";


    while ( ! search.equals( "quit" ) ) 
    {
        System.out.println( "\nEnter a word to search for: " );  
        Scanner input = new Scanner(System.in);
        search = input.next();
        Scanner file = new Scanner(new File("words.txt"));

   while(file.hasNextLine()){
            String str = file.nextLine();
            if(str.indexOf("search") != -1){
                System.out.println( "Word '" + search + "' was found");}

            else  System.out.println( "Word '" + search + "' was NOT found");}
    }
  } 
}

2 个答案:

答案 0 :(得分:0)

目前,您的代码会检查每行上是否存在该字词。它需要检查整个文件中是否存在该单词。要解决此问题,您可以连接线字符串,也可以使用布尔变量来跟踪是否找到了单词。

答案 1 :(得分:0)

既然你没有陈述具体问题,但似乎在寻求建议,我会指出我看到的一些缺陷以及改进。

潜在缺陷:

  1. 您正在检查文件的每一行而不是整个文件。我对您的要求的解释,您应该验证这一点,您需要确定所提供的单词是否存在于文件,而不是哪行包含它。
  2. 分割文件的唯一边界是新行(由于使用了readLine())。但是,我想知道为什么要求使用“word”这个词。你应该分裂词边界吗?例如,如果文件中包含“我将抵达华盛顿州塔科马”的句子,它将匹配搜索“Taco”,这与塔科马市无关。
  3. 每次输入单词时都会重新扫描整个文件。您的要求没有说明您是否需要担心在运行时更改文件。我猜不是,这意味着你可以放弃阅读它并将其解析为适当的数据结构。
  4. 您正在对文件进行线性扫描。查找所有单词会更快,将它们存储到为快速搜索而优化的数据结构中。
  5. 小写与大写匹配的必需/预期行为是什么?“taco”应该匹配“Taco”吗?
  6. 我的建议:

    1. 在进入输入循环之前,逐行读取文件的内容,并在空格上拆分以找到“单词”。
    2. 将每个单词存储到针对子线性搜索优化的数据结构中。我会把它留给你找一个合适的练习。检查Java集合框架。
    3. 如果您想以不区分大小写的方式处理此问题,请在将每个字添加到您的收藏集之前对其进行小写。
    4. 在您的输入循环中,对先前构建的单词集合执行Collection.contains(o)搜索,以查看它是否出现在文件中。
    5. 如果要以不区分大小写的方式处理此问题,请在调用Connection.contains(o)之前将搜索项小写。