好的,所以我在尝试更新文本文件中的行或句子时遇到问题。
我的程序的工作方式是:如果用户输入问题,程序会在文本文件中搜索该确切的问题(假设是n)。问题的答案将在以下行(n + 1)。我的问题是尝试将以下行(n + 1)更新为用户输入的新行。
当我尝试更新文本文件中的行时,我一直收到Exception in thread "main" java.util.NoSuchElementException: No line found
。我的removedata()
是我尝试更新文本行的地方。
这是我的代码
public static void removedata(String s) throws IOException {
File f = new File("data.txt");
File f1 = new File("data2.txt");
BufferedReader input = new BufferedReader(new InputStreamReader(
System.in));
BufferedReader br = new BufferedReader(new FileReader(f));
PrintWriter pr = new PrintWriter(f1);
String line;
while ((line = br.readLine()) != null) {
if (line.contains(s)) {
System.out.println("Enter new Text :");
String newText = input.readLine();
line = newText;
System.out.println("Thank you, Have a good Day!");
}
pr.println(line);
}
br.close();
pr.close();
input.close();
Files.move(f1.toPath(), f.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
public static void parseFile(String s) throws IOException {
File file = new File("data.txt");
Scanner scanner = new Scanner(file);
Scanner forget = new Scanner(System.in);
while (scanner.hasNextLine()) {
final String lineFromFile = scanner.nextLine();
if (lineFromFile.contains(s)) {
System.out.println(scanner.nextLine());
System.out
.println(" Would you like to update this information ? ");
String yellow = forget.nextLine();
if (yellow.equals("yes")) {
removedata(scanner.nextLine()); // NoSuchElementException
// error
} else if (yellow.equals("no")) {
System.out.println("Have a good day");
// break;
}
}
}
}
public static void getinput() throws IOException {
Scanner scanner = new Scanner(System.in);
String input = null;
/* End Initialization */
System.out.println("Welcome ");
System.out.println("What would you like to know?");
System.out.print("> ");
input = scanner.nextLine().toLowerCase();
parseFile(input);
}
public static void main(String args[]) throws ParseException, IOException {
/* Initialization */
getinput();
}
我的文字文件是:
what is the textbook name?
the textbook name is Java
how is the major?
the major is difficult
how much did the shoes cost?
the shoes cost ten dollars
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
问题在于:
while (scanner.hasNextLine()) { //(1)
final String lineFromFile = scanner.nextLine(); //(2)
if (lineFromFile.contains(s)) { //(3)
System.out.println(scanner.nextLine()); //(4)
//....
String yellow = forget.nextLine(); //(5)
if (yellow.equals("yes")) {
removedata(scanner.nextLine()); //(6)
}
}
//....
}
首先,您正在迭代扫描仪行,检查是否有行(1)。现在,您将在(2)上获得扫描仪的第一行,但如果条件(3)成功,则您将在{4}内的{4}处再次检索下一行行。同样适用于(5)和(6)。
现在,假设您已经到达文件末尾(2)并且条件(3)成功。您将收到逻辑上没有此类行的例外情况。在(5)和(6)也可能发生同样的情况。
System.out.println(....)
的每次调用都会在流上打开文件的下一行。
我建议您在循环中执行一个读取行,然后在需要时应用收到的字符串。
答案 1 :(得分:1)
将 parsefile
中的 if block 中的代码更改为
String temp = scanner.nextLine();
System.out.println(temp);
System.out
.println(" Would you like to update this information ? ");
String yellow = forget.nextLine();
if (yellow.equals("yes")) {
removedata(temp); // NoSuchElementException
// error
} else if (yellow.equals("no")) {
System.out.println("Have a good day");
// break;
}
要解释为什么会这样,请看Nick L.的答案。