如何在java中正确获取包含特定单词的每一行

nbysray5  于 2021-07-05  发布在  Java
关注(0)|答案(3)|浏览(262)

我正试图写一个程序,读取一个文件,检查每一行,其中包含一个特定的字,然后打印出来。如果没有一个它应该打印“不符合你的搜索”。这是我到目前为止,我有麻烦把它都放在一起。在所有我的绞尽脑汁,更换了 whileif 或者将第二个if语句放在while之外,有时输入什么并不重要,它总是说“no match for your search”,有时说java.util.nosuchelementexception:no line found。有时它冻结,我搜索这个,它说这是一个错误在cmd或什么的。任何帮助将不胜感激,我是一个新的java所以请任何事情,你可以建议我将有帮助和感激

System.out.println("search for book");

String search = scan.next();    
scan.nextLine();    

File file = new File("library.txt");
Scanner in = null;
in = new Scanner(file);

String line = in.nextLine();
while(in.hasNext()) {
    if(line.contains(search)) {
        System.out.println(line);
    }   

    if(!line.contains(search)) {
        System.out.println("no match for your search");
        System.exit(0);
    }
}
bis0qfac

bis0qfac1#

不要提及代码中的逻辑错误,您可能应该在循环外部创建逻辑(布尔)变量并将其设置为 false . 如果遇到您的情况,请将其设置为 true . 在while循环之后,检查值。如果为false,则表示找不到行,您应该打印邮件。
例子:

boolean foundAnything = false;
while(...) {
    ...
    if(condition) {
        foundAnything = true;
        ...
    }
    ...
}

// Nothing was found
if(!foundAnything) {
    ...
}
2ul0zpep

2ul0zpep2#

首先你好像跳过了第一行。其次,第二个if子句是多余的。

Boolean found=false;
while(in.hasNext()) {
    String line = in.nextLine();
    if(line.contains(search)) {
        System.out.println(line);
        found=true;
    }           
}

if(found==false) System.out.println("no match for your search");
rlcwz9us

rlcwz9us3#

有时我输入什么并不重要,它总是说“不符合你的搜索”
这里最大的问题是循环中的这一部分:

while(in.hasNext()) {
    if(line.contains(search)) {
        System.out.println(line);
    }   

    if(!line.contains(search)) {
        System.out.println("no match for your search");
        //HERE!!!
        System.exit(0);
    }
}
``` `System.exit(0)` 将停止程序,并且不会执行任何其他操作。所以如果 `search` 行中找不到单词,程序结束。
有时它会说java.util.nosuchelementexception:找不到行
你读了循环前的第一行,也许你有一个空文件。

File file = new File("library.txt");
Scanner in = null;
in = new Scanner(file);

//this reads the first line of the file
String line = in.nextLine();
while(//rest of code...

您可以通过以下方式克服这两个问题:
只读取循环中的文件内容
使用标志检查是否找到单词
只有找到单词或文件没有更多行时才停止循环
在循环中,如果还没有找到单词,就让它继续
避免使用 `System#exit` 除非真的需要
如果循环后找不到单词,则打印一条消息
考虑到这些建议,您的代码可以这样设计:

File file = new File("library.txt");
Scanner in = new Scanner(file);

//Use a flag to check if the word was found
boolean found = false;

//Stop the loop only if the word was found OR if the file has no more lines
while (!found && in.hasNextLine()) {
//Read the contents of the file only in the loop
String line = in.nextLine();
if (line.contains(search)) {
found = true;
System.out.println(line);
}
//In the loop, if the word is not found yet, just let it continue
}
//If after the loop the word was not found, print a message
if (!found) {
System.out.println("no match for your search");
}

相关问题