我正试图写一个程序,读取一个文件,检查每一行,其中包含一个特定的字,然后打印出来。如果没有一个它应该打印“不符合你的搜索”。这是我到目前为止,我有麻烦把它都放在一起。在所有我的绞尽脑汁,更换了 while
与 if
或者将第二个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);
}
}
3条答案
按热度按时间bis0qfac1#
不要提及代码中的逻辑错误,您可能应该在循环外部创建逻辑(布尔)变量并将其设置为
false
. 如果遇到您的情况,请将其设置为true
. 在while循环之后,检查值。如果为false,则表示找不到行,您应该打印邮件。例子:
2ul0zpep2#
首先你好像跳过了第一行。其次,第二个if子句是多余的。
rlcwz9us3#
有时我输入什么并不重要,它总是说“不符合你的搜索”
这里最大的问题是循环中的这一部分:
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...
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");
}