Scanner类的next()方法和nextLine()方法的异同点

通过一段代码就可以明白其中的奥妙!!

 1 import java.util.Scanner;
 2
 3 public class next_nextLine {
 4     public static void main(String[] args) {
 5         Scanner s = new Scanner(System.in);
 6
 7         System.out.println("输入第一个字符串:");
 8         String s1 = s.nextLine();
 9         System.out.println(s1);
10
11         System.out.println("输入第二个字符串:");
12         String s2 = s.next();
13         System.out.println(s2);
14
15     }
16 }

输出结果:

结论:

next()方法不能读取空白符,读到空白字符就结束!(包括tab、空格、回车)

nextLine()方法可以读取空格,遇到回车符结束!

再来看一段代码

 1 import java.util.Scanner;
 2
 3 public class next_nextLine {
 4     public static void main(String[] args) {
 5         Scanner s = new Scanner(System.in);
 6
 7         System.out.println("输入第一个字符串:");
 8         String s1 = s.next();//交换next()和nextLine()方法的位置
 9         System.out.println(s1);
10
11         System.out.println("输入第二个字符串:");
12         String s2 = s.nextLine();
13         System.out.println(s2);
14
15     }
16 }

输出结果:

结论:

  根据之前的结论,next()方法读取到空白符就结束,nextLine()读取到回车结束也就是“\r”,那么我们上面遇到的问题就是next()读取到空白符前的数据就结束了,把回车“\r”留给了nextLine(),所以nextLine()没有给你输入的机会,就直接结束了。

解决办法:在next()下面再加一个nextLine()

 1 import java.util.Scanner;
 2
 3 public class next_nextLine {
 4     public static void main(String[] args) {
 5         Scanner s = new Scanner(System.in);
 6
 7         System.out.println("输入第一个字符串:");
 8         String s1 = s.next();//交换next()和nextLine()方法的位置
 9         System.out.println(s1);
10
11         s.nextLine();
12
13         System.out.println("输入第二个字符串:");
14         String s2 = s.nextLine();
15         System.out.println(s2);
16
17     }
18 }

输出结果:

原文地址:https://www.cnblogs.com/sunbr/p/11622942.html

时间: 2024-10-10 05:36:06

Scanner类的next()方法和nextLine()方法的异同点的相关文章

StringBuffer类的delete()方法和deleteCharAt()方法的区别

引言 StringBuffer类的delete()方法和deleteCharAt()方法都是用来删除StringBuffer字符串中的字符 区别 1.对于delete(int start,int end)这个方法一共有两个参数是int类型的,代表从索引下标start删除字符到索引下标end字符,但是不包括end 2.对于StringBuffer中的deleteCharAt(int index)方法:只有一个参数,使用时删除索引为index的字符 代码及结果如下图所示 package String

关于Object类的equals方法和hashCode方法

关于Object类的equals的特点,对于非空引用: 1.自反性:x.equals(x) return true : 2.对称性:x.equals(y)为true,那么y.equals(x)也为true: 3.传递性:x.equals(y)为true,y.equals(z)为true,那么x.equals(z)也为true: 4.一致性:x.equals(y)的第一次调用为true,那么x.equals(y)的第二次,第三次,...,第n次调用也为true,前提条件是在比较之间没有修改x,也没

线程Thread类的start()方法和run()方法

一.初识 java的线程是通过java.lang.Thread类来实现的.VM启动时会有一个由主方法所定义的线程.可以通过创建Thread的实例来创建新的线程.每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体.通过调用Thread类的start()方法来启动一个线程. 在Java当中,线程通常都有五种状态,创建.就绪.运行.阻塞和死亡. 第一是创建状态.在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态. 第二是就绪状态.

OC 中 load 方法和 initialize 方法的异同

+ (void)load; 当类对象被引入项目时, runtime 会向每一个类对象发送 load 消息 load 方法会在每一个类甚至分类被引入时仅调用一次,调用的顺序:父类优先于子类, 子类优先于分类 load 方法不会被类自动继承 + (void)initialize; 也是在第一次使用这个类的时候会调用这个方法

Android中Path类的lineTo方法和quadTo方法画线的区别

当我们需要在屏幕上形成画线时,Path类的应用是必不可少的,而Path类的lineTo和quadTo方法实现的绘制线路形式也是不一样的,下面就以代码的实现来直观的探究这两个方法的功能实现区别: 1. Path--->quadTo(float x1, float y1, float x2, float y2): 该方法的实现是当我们不仅仅是画一条线甚至是画弧线时会形成平滑的曲线,该曲线又称为"贝塞尔曲线"(Bezier curve),其中,x1,y1为控制点的坐标值,x2,y2为终

emberjs重写补充类之reopen方法和reopenClass方法

无需一次性将类定义完全,你可以使用reopen方法来重新打开(reopen)一个类并为其定义新的属性. Person.reopen({ isPerson: true }); Person.create().get('isPerson') // true 当使用reopen时,你也同样可以覆写已经存在的方法并调用this._super. Person.reopen({ // override `say` to add an ! at the end say: function(thing) { t

Date类与SimpleDateFormat类中parse()方法和format()方法

1 package ppt11util类; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 7 public class SimpleDateFormat类 { 8 public static void main(String[] args) throws ParseException { 9 Date date =new Date();//获

Thread类的interrupted方法和isInterrupted方法的区别

如下所示,interrupted()会改变线程的中断状态(清除),而isInterrupted()不影响线程的中断状态   1 /** * Tests whether the current thread has been interrupted. The * <i>interrupted status</i> of the thread is cleared by this method. In * other words, if this method were to be c

线程中测试getName方法和getId方法

测试Thread类的getName方法和getI的方法,1.创建两个线程,输出默认的线程名字和默认的ID.2.创建一个线程,设置线程的名字并输出线程名字和默认ID. 一.获取默认的线程名字和ID,首先,新建类TestThreadNameAndId,在该类的main方法中,创建两个线程t0.t1:接着分别使用Thread类的getName方法和getId方法获取线程的名字和ID. //获取线程名字及IDpublic class TestThreadNameAndId {    //测试线程的get