如何在文件中搜索+1句?

时间:2015-05-07 04:43:44

标签: java search text-files java.util.scanner

好的,所以我试图将所有用户输入存储到文本文件中。例如,如果用户输入问题,我在该文本文件中搜索该问题。如果找到问题,文本文件中的下一行将是问题的答案。所以我的输出将是找到的文本+ 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

4 个答案:

答案 0 :(得分:0)

lineFromFile被声明为final String,您正在尝试向其中添加+1,但您无法做到这一点,尤其是因为1是一个int不是字符串。这就是它悬挂的原因。

请改为:

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

答案 1 :(得分:0)

据我所知,它不应该挂起......但我们先来看看代码。 lineFromFile + 1 没有特殊含义,也不会给你下一行。你需要的是替换这一行:

System.out.println(lineFromFile + 1);

通过以下方式:

if (scanner.hasNextLine()) {
    final String response = scanner.nextLine();
    System.out.println(response);
}

逻辑是这样的:你已经得到了问题所以得到下一行(将它存储在响应中)并打印出来。不要盲目地这样做,因为你可能没有下一行,请像在while循环中一样检查 scanner.hasNextLine()

更新:关于悬挂问题,不应该因为我知道而发生。 Java具有类型转换,并且将int文字连接到String应该产生新的String。字符串是不可变的,因此最终修饰符不应该使代码挂起。见https://docs.oracle.com/javase/tutorial/java/data/converting.html

无论如何,解决方案不包含该代码,所以这里不应该是一个问题。

答案 2 :(得分:0)

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

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

您的第一个代码正在尝试检索" next"行终结者。如果用户尝试输入值,这将是第二次输入。

答案 3 :(得分:0)

你能尝试一下这种方法吗?

var async = require('async'),
    prompt = require('prompt');

var arr = ["A", "match", "b"];

async.mapSeries(arr,
  function iterator(item, next) {
    if (item === "match") {
      return next(null, item);
    }

    console.log('Replacing ' + item);
    prompt.start();
    prompt.get(['val'], function (err, result) {
      prompt.pause();
      return next(err, result.val);
    });
  },
  function callback(err, updatedArr) {
    if (!err) // do something with updatedArr
  }
);

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