java问题:不要在nextByte()、nextShort()、nextInt()、nextLong()、nextFloat()、nextDouble()、next()之后使用nextLine()
2017-05-12 09:34
369 查看
方法nextByte()、nextShort()、nextInt()、nextLong()、nextFloat()、nextDouble()、next()等都称为标记读取方法(token-reading method),因为它们会读取用分隔符分隔开的标记。默认情况下,分隔符是空格。
方法next()和nextLine()都会读取一个字符串。next()方法读取一个由分隔符分隔的字符串,但是nextLine()读取一个以换行符结束的行。
标记读取方法不能读取标记后面的分隔符。如果在标记读取方法之后调用nextLIne(),该方法读取从这个分隔符开始,到这行的行分隔符结束的字符。这个行分隔符也被读取,但是它不是nextLIne()返回的字符串部分。
假设一个名为test.txt的文本文件包含一行
120 240
在执行下面代码之后:
Scanner input=new Scanner(new File("test.txt"));
int n=input.nextInt();
String line=input.nextLine();
n的值为120,而line包含的字符是' '、'2'、' 4'、' 0'。
如果是从键盘键入,那会发生什么呢?假设同样的,对于下面的代码,我先输入7,回车,再输入17,回车:
Scanner input=new Scanner(System.in);
int n=input.nextInt();
String line=input.nextLine();
结果是n的值为7,而line只是一个空的字符串,原因很简单:标记读取方法nextInt()读取7,然后在分隔符处停止,这里的分隔符是行分隔符(回车键)。
而nextLine()会从从此分隔符开始,直到将行分隔符读取后结束,返回的字符串即为行分隔符之前的字符串,而行分隔符之前没有什么字符,故line为一个空的字符串。
同时,我们可以用Scanner类从字符串中读取数据。
方法next()和nextLine()都会读取一个字符串。next()方法读取一个由分隔符分隔的字符串,但是nextLine()读取一个以换行符结束的行。
标记读取方法不能读取标记后面的分隔符。如果在标记读取方法之后调用nextLIne(),该方法读取从这个分隔符开始,到这行的行分隔符结束的字符。这个行分隔符也被读取,但是它不是nextLIne()返回的字符串部分。
假设一个名为test.txt的文本文件包含一行
120 240
在执行下面代码之后:
Scanner input=new Scanner(new File("test.txt"));
int n=input.nextInt();
String line=input.nextLine();
n的值为120,而line包含的字符是' '、'2'、' 4'、' 0'。
如果是从键盘键入,那会发生什么呢?假设同样的,对于下面的代码,我先输入7,回车,再输入17,回车:
Scanner input=new Scanner(System.in);
int n=input.nextInt();
String line=input.nextLine();
结果是n的值为7,而line只是一个空的字符串,原因很简单:标记读取方法nextInt()读取7,然后在分隔符处停止,这里的分隔符是行分隔符(回车键)。
而nextLine()会从从此分隔符开始,直到将行分隔符读取后结束,返回的字符串即为行分隔符之前的字符串,而行分隔符之前没有什么字符,故line为一个空的字符串。
同时,我们可以用Scanner类从字符串中读取数据。
相关文章推荐
- Java学习笔记1——关于Scanner类中nextDouble、nextInt、……等方法与nextLine方法联用的问题
- next、nextInt、nextDouble、nextFloat和nextLine的区别。
- 以OJ2024C语言合法标识符介绍java中Scanner类中nextLine()方法与next()或nextInt()
- Scanner的next,nextint和nextLine的使用总结
- 小心:Scanner中关于next()、nextInt()和nextLine()的问题
- Java中nextInt()后紧跟nextLine()方法造成的一些问题
- Java中next与nextLine的区别与使用
- Java中Scanner的nextInt(),next(),nextLine()方法总结
- java中Scanner类nextInt之后用nextLine无法读取输入
- java中Scanner类nextLine()和next()的区别和使用方法
- java中Scanner类nextLine()和next()的区别和使用方法
- java中next(),nextInt()和nextLine()
- JAVA学习【5】String数组输入,及nextLine()、nextInt()、next()区别
- Java读入时的一些小问题--next()和nextLine()
- java中的nextInt(),next()和nextLine()
- java中scanner.nextint和nextline的问题
- java:解决在nextInt()后使用nextLine()的方法
- Java中Scanner的nextInt(),next(),nextLine()方法总结
- Java中关于nextInt()、next()和nextLine()的理解
- java hasNext()与next()的区别,hasNextInt()与nextInt()的区别,hasNextDouble()与nextDouble()的区别