在JAVA的初阶段学习中,经常会把这几个函数搞混,或者对他们的用法模糊不清。
下面将对这四个函数进行理论和举例分析,以及少许用法。
先给理论:
next():只读取输入直到空格。它不能读两个由空格或符号隔开的单词。此外,next()在读取输入后将光标放在同一行中。next()只读空格之前的数据,并且光标指向本行。
nextLine():读取输入,包括单词之间的空格和除回车以外的所有符号(即它读到行尾)。读取输入后,nextLine()将光标定位在下一行。
hasNext():
1、输出为布尔值。
2、判断输入的缓存中是否有效字符,遇到空格结束。
3、如果只输入空格,不会匹配,返回false。
hasNextLine():
1、以Enter为结束符,判断此行有没有输入,空白输入也会返回true。
可能我们初步的想法是控制台会先打印 “请输入内容"
但控制台在程序开始运行的时候就让我们输入一些东西。输入后才显示 “请输入内容"
这是什么原因导致的呢?
首先明确一件事:hasNextLine()和nextLine()都可以让用户进行输入。
那我们的视线再回到程序上来,可以这样理解:
1.in.hasNextLine()先让用户输入一些东西,让后将这一行存储到缓冲区中。
2.因为现在缓冲区非空,所以nextline就没有让用户再进行一次输入。直接把这一行的内容赋给了字符串s
3.让后循环一直进行。
那如果程序变成这样子呢?
我们输入12 25(中间有一个空格)
控制台输出的结果如下
这正是next()和nextline()函数的区别所在,next()读取缓冲区时遇到空格就会停止,而nextline()会读取一整行的内容.
而hasNext()和hasNextLine()函数的区别是不是也和上面类似呢?
控制台如下:
另外一个程序
控制台:
通过实例可以进行猜测,hasNext()和hasNextLine()函数在将用户输入存入缓冲区的作用是相同的,都是将整行存入。
总结:
1.next()读取缓冲区时遇到空格就会停止,而nextline()会读取一整行的内容.
2.hasNextLine()和nextLine()都可以让用户进行输入。同理如next和hasNext;
3.hasNext()和hasNextLine()函数在将用户输入存入缓冲区的作用是相同的,都是将整行存入。
一个用法:
private static String readKeyBoard(int limit, boolean blankReturn) {
String line = "";
while (scanner.hasNextLine()) {
line = scanner.nextLine();
if (line.length() == 0) {
if (blankReturn) return line;
else continue;
}
if (line.length() < 1 || line.length() > limit) {
System.out.print("输入长度(不大于" + limit + ")错误,请重新输入:");
continue;
}
break;
}
return line;
}
可以让用户一直输入,直到用户输入符合条件的字符串才退出循环。