我的扫描仪(用于用户输入)只读取第一个单词,如何让它读取所有输入?

时间:2014-02-20 05:59:15

标签: java input

嘿嘿伙计们,我想知道如何才能让扫描仪接受的不仅仅是第一个字?

我的代码(摘要)

if (command.equals("diary"))
{
    String stuff;
    while (scanner.hasNextLine())
    {
        stuff = scanner.nextLine();

        BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\text.txt")); //you don't need to create a File object, FileWriter takes a string for the filepath as well
        try {
            writer.write("Diary info: " + stuff);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        writer.close();
    }

}

1 个答案:

答案 0 :(得分:0)

通常next将读取整个数据直到下一个分隔符,因为默认分隔符是一个或多个空格的集合,您只能在这样的空格(或最终数据结束)之前看到第一个单词。
要阅读整行,您可以使用nextLine()代替next() 要读取整个数据(包含多行),您可以使用

遍历所有行
while (scanner.hasNextLine()){
    String line = scanner.nextLine();
}

或者您可以设置分隔符以仅匹配数据结尾。你可以用

来做
scanner.useDelimiter("\\Z"); 

只需像现在这样使用scanner.next()"\\Z"是正则表达式,表示整个数据的结尾。您还可以使用"\\A"将分隔符设置为数据的开头,因为在扫描程序光标的当前位置之后的第一个字符后搜索分隔符,因此永远不会发现扫描程序在数据结束之前进行迭代。


更新以回复您的评论:

尝试在循环之外移动writer,就像在这段代码示例中一样:

if (command.equals("diary"))
{
    String stuff;
    BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\text.txt")); //you don't need to create a File object, FileWriter takes a string for the filepath as well
    Scanner scanner =null;
    while (scanner.hasNextLine())
    {
        stuff = scanner.nextLine();

        try {
            writer.write("Diary info: " + stuff);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }
    writer.close();

}