java中java scanner next类nextLine和next的区别和使用方法

java中使用Scanner类实现数据输入十分简单方便,Scanner类中next()与nextLine()都可以实现字符串String的获取,所以我们会纠结二者之间的区别。
其实next()与nextLine()区别很明确:
next() 方法遇见第一个有效字符(非空格,非换行符)时,开始扫描,当遇见第一个分隔符或结束符(空格或换行符)时,结束扫描,获取扫描到的内容,即获得第一个扫描到的不含空格、换行符的单个字符串。
使用nextLine()时,则可以扫描到一行内容并作为一个字符串而被获取到。
举例说明一下:
1 import java.util.S
3 public class ScannerTest {
public static void main(String[] args) {
System.out.println("----&Test1:");
Scanner scanner = new Scanner(System.in);
String nextStr = scanner.next();
System.out.println("scanner.next()得到:" + nextStr);
<span style="color: #
String nextlineStr = scanner.nextLine();
<span style="color: #
System.out.println("scanner.nextLine()得到:" + nextlineStr);
<span style="color: #
<span style="color: #
System.out.println("\n----&Test2:");
<span style="color: #
String nextlineStr2 = scanner.nextLine();
<span style="color: #
System.out.println("scanner.next()得到:" + nextlineStr2);
<span style="color: #
String nextStr2 = scanner.next();
<span style="color: #
System.out.println("scanner.next()得到:" + nextStr2);
<span style="color: #
<span style="color: # }
运行以上代码得到(我每次都是输入Hello World Nice To See You):
阅读(...) 评论()Java Scanner类中的next方法和nextLine方法连用时要注意的地方_Java教程_动态网站制作指南
Java Scanner类中的next方法和nextLine方法连用时要注意的地方
来源:人气:12430
这里讨论的是关于 scanner类中的next方法和nextLine方法。&&&&&什么是next()和nextLine()方法?
&&&问题出现:
&&&先看以下代码:&&&一个简单的控制台输入和输出:
&&&view plaincopy to clboardint?
package cn.nileader.app.&&&
import java.util.S&&&
public class Test {&&&
&&&&public static void main(String[] args) throws Exception{&&&
&&&&&&&&Scanner cin = new Scanner(System.in);&&&
&&&&&&&&String&&ni = cin.nextLine();&&&
&&&&&&&&&&&&System.out.print(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());&&&
&&&&&&&&ni = cin.nextLine();&&&
&&&&&&&&System.out.print(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());&&&
package cn.nileader.app.
import java.util.S
public class Test {
public static void main(String[] args) throws Exception{
Scanner cin = new Scanner(System.in);
&&&&&&&&String&&ni = cin.nextLine();
System.out.print(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());
&&&&ni = cin.nextLine();
&&&&System.out.print(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());
&&&再看下面的代码:
&&&view plaincopy to clipboardprint?
package cn.nileader.app.&&&
import java.util.S&&&
public class Test {&&&
&&&&public static void main(String[] args) throws Exception{&&&
&&&&&&&&Scanner cin = new Scanner(System.in);&&&
&&&&&&&&String&&ni = cin.next();&&&
&&&&&&&&&&&&System.out.print(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());&&&
&&&&&&&&ni = cin.next();&&&
&&&&&&&&System.out.print(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());&&&
package cn.nileader.app.
import java.util.S
public class Test {
public static void main(String[] args) throws Exception{
Scanner cin = new Scanner(System.in);
&&&&&&&&String&&ni = cin.next();
System.out.print(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());
&&&&ni = cin.next();
&&&&System.out.print(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());
&&&以上段代码都是正确、无聊的。
&&&&&&精彩的来了……
&&&&运行下面的代码:
&&&&view plaincopy to clipboardprint?
package cn.nileader.app.&&&
import java.util.S&&&
public class Test {&&&
&&&&public static void main(String[] args) throws Exception{&&&
&&&&&&&&Scanner cin = new Scanner(System.in);&&&
&&&&&&&&String&&ni = cin.next();&&&
&&&&&&&&&&&&System.out.println(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());&&&
&&&&&&&&ni = cin.nextLine();&&&
&&&&&&&&System.out.print(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());&&&
package cn.nileader.app.
import java.util.S
public class Test {
public static void main(String[] args) throws Exception{
Scanner cin = new Scanner(System.in);
&&&&&&&&String&&ni = cin.next();
System.out.println(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());
&&&&ni = cin.nextLine();
&&&&System.out.print(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());
&&&&运行结果如下:
&&&&ni掌柜
&&&&用Scanner类的next()方法接收了你刚刚输入的字符串是:ni掌柜&&长度是4
&&&&用Scanner类的next()方法接收了你刚刚输入的字符串是:&&长度是0
&&&&完蛋了,当 Java Scanner的next和nextLine方法连用时,
&&&&你根本没有机会输入第二个字符串了!!!
&&&&问题解析:
&&&&&&&next方法和nextLine方法的表象区别是前者读取的是“一段”字符,而后者读取的是一行字符串。
&&&&&&&出现以上现象的原因简单的说主要是由next()方法的不负责造成的。
&&&&&&&next()方法的工作原理:( 肤浅的说)
&&&&&&&从一行中扫描,直到碰到特定的标识符:空格或是换行符(\n),获取其前的字符(串)。
&&&&&&&&看这里,第一个next()方法读入了“ni掌柜”,但并没有读入&\n&,也不负责换行,然后就把 &\n&丢给了nextLine()处理,
&&&&&&&&你也知道的,nextLine()属于那种“见钱眼开”,看见“\n”就收了,然后扫描了 \n 之前的内容,也就是空字符串。于是出现问题了。
&&&&&&&&问题解决:
&&&&&&&&&view plaincopy to clipboardprint?
package cn.nileader.app.&&&
import java.util.S&&&
public class Test {&&&
&&&&public static void main(String[] args) throws Exception{&&&
&&&&&&&&Scanner cin = new Scanner(System.in);&&&
&&&&&&&&String&&ni = cin.next();&&&
&&&&&&&&&&&&System.out.println(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());&&&
&&&&&&&&while(&&(ni = cin.nextLine()).equals(&&) ){}&&&
&&&&&&&&System.out.print(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());&&&
package cn.nileader.app.
import java.util.S
public class Test {
public static void main(String[] args) throws Exception{
Scanner cin = new Scanner(System.in);
&&&&&&&&String&&ni = cin.next();
System.out.println(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());
&&&&while(&&(ni = cin.nextLine()).equals(&&) ){}
&&&&System.out.print(&用Scanner类的next()方法接收了你刚刚输入的字符串是:&+ni+&&&长度是&+ni.length());
&&&&&&&&&运行结果:
&&&&&&&&ni掌柜
&&&&&&&&用Scanner类的next()方法接收了你刚刚输入的字符串是:ni掌柜&&长度是4
&&&&&&&&是个天才
&&&&&&&&用Scanner类的next()方法接收了你刚刚输入的字符串是:是个天才&&长度是4
&&&&&&&&把原来的第二个cin.nextLine()
&&&&&&&&改成 while(&&(ni = cin.nextLine()).equals(&&) ){}
&&&&&&&&这样就可以、除掉上一行的“\n”的影响了。
优质网站模板下次自动登录
现在的位置:
& 综合 & 正文
关于Scanner键盘接收方法中scan.nextLine()和scan.nextInt()的区别
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
String s = sc.nextLine();
System.out.print("a: " + a + " b: " + b + " s: " + s);
以下是我的理解是,哪里不对还请大家指正:
String s = sc.nextLine(); 这里读到的是一个空字符串。
因为你在输入完第二个数字以后,按了一下回车。 假设你第二个数字输入的是:5(加一个回车) 则实际收到的是:5/r/n nextInt() 扫描到了5
nextLine();继续扫描,这个方法会返回当前行的剩余部分,(一直到遇到行分隔符为止,而且不包括行分隔符) 因为5的后面是一个行分隔符/r ,所以nextLine() 就只扫到了一个空的字符串。
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = Integer.parseInt(sc.nextLine());
int b = Integer.parseInt(sc.nextLine());
String s = sc.nextLine();
System.out.print("a: " + a + " b: " + b + " s: " + s);
这个可以运行成功,是因为sc.nextLine() 会将读取到的行分隔符自动去掉。 所以你在输入第二个数字的时候:5(加一个回车) 输入的是5/r/n 不过程序实际扫描到的是5
当再执行这句代码的时候:
String s = sc.nextLine();
因为行里面已经没有数据了,所以程序会阻塞,一直到你再输入数据为止。
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 java hasnextline 的文章

 

随机推荐