英文:
how to properly get every line containing a specific word in java
问题
System.out.println("搜索图书");
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("未找到匹配结果");
System.exit(0);
}
}
英文:
I'm trying to write a program that reads a file and checks every line that contains a specific word then prints it.if there isn't one it should print "no match for your search".this is what I've got so far and and I'm having trouble putting it all together.after all my twinkering around and replacing thewhile
with if
or putting the second if statement outside of the while, sometimes it doesn't matter what i enter it always says "no match for your search" and sometimes it says java.util.NoSuchElementException: No line found. and sometimes it freezes and i searched this up and it says its a bug in cmd or something.any help will be appreciated
and I'm new to java so please any thing you can advise me will be helpful and appreciated
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);
}
}
答案1
得分: 2
不提及您代码中的逻辑错误,您应该在循环外创建一个逻辑(布尔)变量,并将其设置为“false”。如果遇到您的条件,请将其设置为“true”。
在while循环之后,检查这个值。如果它为false,这意味着没有找到任何行,您应该打印您的消息。
示例:
boolean foundAnything = false;
while (...) {
...
if (condition) {
foundAnything = true;
...
}
...
}
// 没有找到任何内容
if (!foundAnything) {
...
}
英文:
Not mentioning logical errors in your code, you should probably create logical (boolean) variable outside of the loop and set it to false
. If you encounter your condition, set it to true
.
After the while loop, check the value. If it's false, that means no lines were found and you should print your message.
Example:
boolean foundAnything = false;
while(...) {
...
if(condition) {
foundAnything = true;
...
}
...
}
// Nothing was found
if(!foundAnything) {
...
}
答案2
得分: 1
> 有时候不管我输入什么,它总是显示 "没有符合您搜索条件的结果"
在这里,您的循环内部存在最大的问题:
while(in.hasNext()) {
if(line.contains(search)) {
System.out.println(line);
}
if(!line.contains(search)) {
System.out.println("没有符合您搜索条件的结果");
//这里!!!
System.exit(0);
}
}
System.exit(0)
会终止程序,不会执行其他任何代码。因此,如果在行中未找到 search
单词,程序将会结束。
> 有时候会显示 java.util.NoSuchElementException: 找不到行
您在循环之前读取了第一行,并且可能文件是空的。
File file = new File("library.txt");
Scanner in = null;
in = new Scanner(file);
//这行代码读取了文件的第一行
String line = in.nextLine();
while(//代码的其余部分...
您可以通过以下方式解决这两个问题:
- 仅在循环中读取文件的内容
- 使用标志来检查是否找到了目标单词
- 仅在找到单词或文件没有更多行时才停止循环
- 在循环中,如果目标单词尚未找到,就让循环继续
- 除非绝对必要,避免使用
System#exit
- 如果循环结束后仍未找到目标单词,打印一条消息
根据这些建议,您的代码可以设计如下:
File file = new File("library.txt");
Scanner in = new Scanner(file);
//使用标志来检查是否找到了目标单词
boolean found = false;
//仅在找到单词或文件没有更多行时才停止循环
while (!found && in.hasNextLine()) {
//仅在循环中读取文件的内容
String line = in.nextLine();
if (line.contains(search)) {
found = true;
System.out.println(line);
}
//在循环中,如果目标单词尚未找到,就让循环继续
}
//如果循环结束后仍未找到目标单词,打印一条消息
if (!found) {
System.out.println("没有符合您搜索条件的结果");
}
英文:
> sometimes it doesn't matter what i enter it always says "no match for your search"
The biggest issue here is this part inside your loop:
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)
will stop the program and nothing else will be executed. So if the search
word is not found in the line, the program finishes.
> sometimes it says java.util.NoSuchElementException: No line found
You read the first line before the loop and maybe you have an empty file.
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...
You can overcome these two issues by:
- Read the contents of the file only in the loop
- Use a flag to check if the word was found
- Stop the loop only if the word was found OR if the file has no more lines
- In the loop, if the word is not found yet, just let it continue
- Avoid using
System#exit
unless really needed - If after the loop the word was not found, print a message
With these suggestions in mind, your code can be designed like this:
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");
}
答案3
得分: 0
首先,您似乎跳过了第一行。其次,第二个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("没有找到与您的搜索匹配的结果");
英文:
First of all you seem to skip your first line. Secondly, second if clause is redundant.
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");
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论