Java 如何搜索句子+;1在一个文件中?

Java 如何搜索句子+;1在一个文件中?,java,search,text-files,java.util.scanner,Java,Search,Text Files,Java.util.scanner,好的,我正在尝试将所有用户输入存储到一个文本文件中。例如,如果用户输入一个问题,我会在文本文件中搜索该问题。如果找到问题,文本文件中的下一行将是问题的答案。因此,我的输出将是找到的文本+1。由于某些原因,我的代码在搜索文件时挂起。例如,如果用户输入“教科书的名称是什么?”文本文件包含问题,但我想输出“教科书名称是java”,但代码挂起 这是我的密码 public static void parseFile(String s) throws IOException { File file

好的,我正在尝试将所有用户输入存储到一个文本文件中。例如,如果用户输入一个问题,我会在文本文件中搜索该问题。如果找到问题,文本文件中的下一行将是问题的答案。因此,我的输出将是找到的文本+1。由于某些原因,我的代码在搜索文件时挂起。例如,如果用户输入“教科书的名称是什么?”文本文件包含问题,但我想输出“教科书名称是java”,但代码挂起

这是我的密码

public static void parseFile(String s) throws IOException {
    File file = new File("data.txt");
    Scanner scanner = new Scanner(file);
    while (scanner.hasNextLine()) {
        final String lineFromFile = scanner.nextLine();
        if (lineFromFile.contains(s)) {

            // a match!
            System.out.println(lineFromFile + 1);  // code hangs right here.
        }
    }

}


   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();

}
这是我的文本文件

          the current assignment is 4.5
          the class is near
          the lecture is at four
          what is the textbook name?
          the textbook name is Java
          the major is difficult
          the number of test are six

lineFromFile
声明为
final String
,您正试图向其中添加
+1
,这是不允许的,特别是因为
1
int
而不是字符串。这就是它被悬挂的原因

改为这样做:

 System.out.println(lineFromFile + " + 1" ); 

就我所知,它不应该挂起来。。。但是让我们先来看看代码。lineFromFile+1没有特殊意义,不会给出下一行。您需要的是更换这一行:

System.out.println(lineFromFile + 1);
例如:

if (scanner.hasNextLine()) {
    final String response = scanner.nextLine();
    System.out.println(response);
}
逻辑是这样的:你已经得到了问题,所以获取下一行(存储它作为响应)并打印它。不要盲目地这样做,因为可能您没有下一行,请像在while循环中那样使用scanner.hasNextLine()进行检查

更新:关于绞刑问题,据我所知不应该发生。Java有类型转换,将int文本连接到字符串应该会产生一个新字符串。字符串是不可变的,因此最后一个修饰符不应使代码挂起。看


无论如何,解决方案不包括该代码,因此这里不应该是问题。

代码不会挂在该行上。尝试将您的代码更改为

input = scanner.next().toLowerCase();

您的第一个代码尝试检索“下一个”行终止符。如果用户试图输入一个值,那么第二个输入是哪个。

您能稍微改变一下这个方法吗

public static void parseFile(String s) throws IOException {
        File file = new File("data.txt");
        Scanner scanner = new Scanner(file);
        while (scanner.hasNextLine()) {
            final String lineFromFile = scanner.nextLine();
            if (lineFromFile.contains(s)) {
                System.out.println(scanner.nextLine());  // code hangs right here.
            }
        }
    }

一旦找到问题,它只打印下一行

你确定?我自己尝试过这个代码,它运行得很好。它确实返回`什么是教科书名称?1`不,我不想输出教科书名称?1我想在问题后输出句子,即使
lineFromFile
是最终的,我们有以下指令:
System.out.println(lineFromFile+“+1”)它将导致创建新的字符串文字。我不认为这会是一个问题。上面的代码将打印
什么是教科书名称?1
作为输入
什么是教科书名称?
,正如预期的那样。这显然是允许的,但不会达到预期目的。哦,不,代码就挂在那里。什么都不是output@Eggz:我在发布之前尝试过此代码,它可以正常工作。我怀疑是其他原因造成了问题。以下是输出:
Welcome您想知道什么?>教科书的名字是什么?教科书的名字是Java
,当我在我的终端运行它时,它就是这样做的。欢迎光临您想知道什么?>教科书的名称是什么?键入问题并按enter键后,它将到达方法
parseFile
。你能调试一下代码吗?它挂在哪里?你应该换掉那条线,这样它就不会挂在那里了。。。如果你按照我的建议替换它:它挂起来了吗?哪里?@Eggz代码是挂起的还是刚刚结束?如果没有找到问题,程序将在没有任何输出的情况下完成,并且它区分大小写,因此请小心不要混合使用小写和大写扫描。请告诉我您的代码挂起的确切位置?请调试并让我们知道。