Scanner类的next()和nextLine()方法有什么区别?

Ann*_*eOK 74 java java.util.scanner

next()和之间的主要区别是nextLine()什么?
我的主要目标是使用Scanner可以"连接" 到任何源(例如文件)的所有文本来阅读.

我应该选择哪一个?为什么?

Tri*_*tan 73

我总是喜欢读取输入nextLine()然后解析字符串.

使用next()只会返回空格之前的内容.nextLine()返回当前行后自动向下移动扫描仪.

从分析数据非常有用的工具nextLine()str.split("\\s+").

String data = scanner.nextLine();
String[] pieces = data.split("\\s+");
// Parse the pieces
Run Code Online (Sandbox Code Playgroud)

有关Scanner类或String类的更多信息,请参阅以下链接.

扫描程序:http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

字符串:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

  • @DavidConrad"Scanner类的next()和nextLine()方法有什么区别?" (5认同)
  • 那么,为什么不直接使用`BufferedReader`来读取?我不明白为什么`Scanner`会如此流行. (4认同)
  • 是的,我意识到这就是OP的要求,我只是想知道,因为您说您“总是喜欢”使用nextLine。 (3认同)

小智 40

next()只能读取输入直到空格.它无法读取由空格分隔的两个单词.此外,next()在读取输入后将光标放在同一行.

nextLine()读取输入,包括单词之间的空格(即,它读取直到行尾\n).读取输入后,nextLine()将光标定位在下一行.

要阅读整行,您可以使用nextLine().


Ole*_*yar 16

来自JavaDoc:

  • A Scanner使用分隔符模式将其输入分解为标记,该分隔符模式默认匹配空格.
  • next():查找并返回此扫描仪中的下一个完整令牌.
  • nextLine():使此扫描程序超过当前行并返回跳过的输入.

所以如果"small example<eol>text" next()应该返回"小"并nextLine()应该返回"小例子"

  • 这是 Java API 设计者的一个问题,或者在 SO 上发布一个问题,也许有人知道为什么。 (2认同)

mur*_*ish 8

我注意到除了next()之外只扫描到空间,而nextLine()扫描整行是下一个等待,直到它获得一个完整的标记,其中nextLine()不等待完整的标记,当'\n'时获得(即当您按下回车键时)扫描仪光标移动到下一行并返回跳过的上一行.它不检查你是否给出了完整的输入,即使它将采用一个空字符串,因为next()不带空字符串

public class ScannerTest {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int cases = sc.nextInt();
        String []str = new String[cases];
        for(int i=0;i<cases;i++){
            str[i]=sc.next();
        }
     }

}
Run Code Online (Sandbox Code Playgroud)

通过更改for循环中的next()和nextLine()来尝试此程序,继续按'\n'即输入键而不进行任何输入,你可以发现使用nextLine()方法在按下给定数量的情况后终止因为next()不会终止,直到您为给定数量的案例提供和输入它.


Z. *_*ang 5

对于此问题,关键是要找到该方法将在哪里停止以及调用该方法之后的游标在哪里。所有方法都将读取光标位置和下一个默认定界符(空格,制表符,\ n-通过按Enter创建)之间的信息(不包括空格),并且光标在定界符之前停止,但nextLine()除外。读取光标位置和\ n之间的信息(包括由定界符创建的空格),并且光标停在\ n后面。

例如:( |代表当前光标位置; _代表空格;以粗体显示由调用方法获得的信息)

23_24_25_26_27 \ n

调用nextInt(); 读23 | _24_25_26_27 \ n

呼叫nextDouble(); 阅读23_ 24 | _25_26_27 \ n

呼叫next(); 阅读23_24_ 25 | _26_27 \ n

调用nextLine(); 读取23_24_25 _26_27 \ n |

此后,应根据您的要求调用该方法。

  • 如此被低估的答案。其他一切都有点误导 (2认同)