nextInt和nextLine以及next方法的区别

最近在刷算法题的时候,发现如下问题

1 Scanner in = new Scanner(System.in)
2
3 int n = in.nextInt();
4
5 String str = in.nextLine();

在控制台中,输入:

3

hello

发现str的值为空,说明nextLine方法,没有读取到"hello"字符串。

为了解决以上问题,现将控制台输入内容的读取方法总结下。

一、nextInt()

it only reads the int value, nextInt() places the cursor in the same line after reading the input.

  只读取整形的数据,输入读取完之后,将光标放在同一行。

  换句话说,当我们使用该方法时,会将光标放在读取数字后面,并且是同一行。

二、nextLine()

reads input including space between the words (that is, it reads till the end of line \n). Once the input is read, nextLine() positions the cursor in the next line.

  读取空格,直到以‘\n‘为标志的行尾。一旦输入读取完毕,该方法会将光标移到下一行开始的位置。

三、next()

read the input only till the space. It can‘t read two words separated by space. Also, next() places the cursor in the same line after reading the input.

  读取输入内容直到遇到空格。它不能读取两个字符之间的空格。同时将光标放在读取输入后面,并且在同一行。

四、实验

  1、实验一

  

 1 public class Test {
 2     public static void main(String[] args) {
 3         Scanner in = new Scanner(System.in);
 4         int n = in.nextInt();
 5         while(n>0){
 6             String test = in.nextLine();
 7             System.out.println("test is :"+test );
 8             n--;
 9         }
10     }
11 }

  查看输入输出:

  

  解释:

  输入:"2回车"

  输出:"test is :"

  第一步:输入2回车后,in.nextInt()读取整形数字2,并将光标移到"2"和"回车"之间

  第二步:接下来,in.nextLine()将读取”回车"内容,因为在控制台中不能显示,所以其内容为空

  第三步:输入hello后,in.nextLine()方法读取hello方法



  

  输入:"2 a b回车"

  输出:"test is : a b"

  输入:"hello回车"

  输出:"test is :hello"

  解释:

  第一步:in.nextInt()方法将光标移动到"2"和“空格a空格b回车”之间;

  第二步:in.nextLine()方法读取光标之后的内容,即“空格a空格b回车”

  第三步:输入"hello回车",in.nextLine()方法读取"hello回车内容",并输出"this is:hello"



  1、实验二

  

 1 public class Test {
 2     public static void main(String[] args) {
 3         Scanner in = new Scanner(System.in);
 4         int n = in.nextInt();
 5         while(n>0){
 6             String test = in.next();
 7             System.out.println("test is :"+test);
 8             n--;
 9         }
10
11     }
12 }

  

  解释:

  第一步:in.nextInt将读入的数字初始化给n,现在光标在"2"和"空格a空格b"之间

  第二步:in.next()方法读取光标之后的"空格a",因为next()不能读取空格,所以遇到第二个空格就停止读取,第一个空格被忽略。此时光标在第二个空格之前

  第三步:读入b

 

  

原文地址:https://www.cnblogs.com/justn0w/p/11143287.html

时间: 2024-10-12 03:04:33

nextInt和nextLine以及next方法的区别的相关文章

Scanner中next()和nextline()读取字符串方法和区别

在实现字符窗口的输入时,我个人更喜欢选择使用扫描器Scanner,它操作起来比较简单.在写作业的过程中,我发现用Scanner实现字符串的输入有两种方法,一种是next(),一种nextLine(),但是这两种方法究竟有什么区别呢?我查了一些资料总结了一下,希望对大家有所帮助- next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键.Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键.Tab键或E

Scanner的next,nextint和nextLine的使用总结

问题所在: java中Scanner类中nextLine()方法与next()或nextInt()联用时可能出现一个常见的错误,那就是当next()或者nextInt(),nextDouble() . nextFloat()用在nextLine的前面时.nextLine会把前者的结束符"换行符"作为字符串读入,进而不需要从键盘输入字符串nextLine已经转向下一条语句执行 public class Test { public static void main(String[] arg

jquery中html 与 text方法的区别

jquery中html 与 text方法的区别 24 May 2012/in 网站设计和开发 /by Bruce 接鉵jquery的时间并不长,以前都是用直接用js写的,现在发现在jquery这个框架用起来很方便,不但代码量少了,使用也比较简单,对于浏览器的兼容问题也不用担心,在使用的过程中也会遇到一些疑问,在html标签中附加子标签时所用的方法html()与text()的区别. 通常在用jquery写ajax时,都会用到html()这个方法,而不用text()这个方法,他们之间有什么区别呢?

Java中创建对象的5种方式 &&new关键字和newInstance()方法的区别

转载:http://www.kuqin.com/shuoit/20160719/352659.html 用最简单的描述来区分new关键字和newInstance()方法的区别:newInstance: 弱类型.低效率.只能调用无参构造.new: 强类型.相对高效.能调用任何public构造. newInstance( )是一个方法,而new是一个关键字,其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用new关键字生成对象没有这个限制.Cla

[BS-27] 创建NSURL的几个方法的区别

创建NSURL的几个方法的区别 URL的基本格式 = 协议://主机地址/路径 URL和Path的区别 * URL:统一资源定位符,格式 “协议+主机名称+路径”   例如:[NSURL URLWithString:@"http://www.baidu.com"]; 本地文件URL字符串格式 file:///Users/wz/Desktop/main.c        //本地文件主机地址是localhost,可以省略,故有3个/ * Path:就是简单的路径,没有协议,没有主机地址 

Hibernate面试题 --- list和iterator方法的区别

Hibernate面试题  ---  list和iterator方法的区别 1.首先看两个例子来比较一下 (1)在用Query方法查询的时候,通过HQL语句来得到Query对象,并对Query对象进行操作,首先是用list方法获取到Query的List集合并输出: 1 @Test 2 public void listQuery() { 3 4 Configuration configuration = new Configuration().configure(); 5 SessionFacto

Java -- Thread中start和run方法的区别

一.认识Thread的 start() 和 run() 1.start(): 我们先来看看API中对于该方法的介绍: 使该线程开始执行:Java 虚拟机调用该线程的 run 方法. 结果是两个线程并发地运行:当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法). 多次启动一个线程是非法的.特别是当线程已经结束执行后,不能再重新启动. 用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码.通过调用Thread类的

RequestDispatcher接口的include()方法与forward()方法的区别

RequestDispatcher接口所定义的forward()方法可以将HTTP请求转送给其他Web资源(例如Servlet.JSP或HTML)进行处理,并产生HTTP回应.RequestDispatcher接口的include()方法与forward()方法非常类似,惟一的不同在于:利用include()方法将HTTP请求转送给其他Servlet后,被调用的Servlet虽然可以处理这个HTTP请求,但是最后的主导权仍然是在原来的Servlet.RequestDispatcher是一个Web

OO 抽象方法与虚方法的区别

 抽象方法与虚方法的区别 抽象方法与虚方法的区别: 一.抽象方法: 1.只能在抽象类中定义: 2.不能有方法的实现:(方法体)[因为抽象类无法实例化,所以抽象方法没有办法被调用,也就是说抽象方法永远不可能被实现.] 3.被子类继承后,必须重写: 4.使用关键字abstract修饰: 二.虚方法: 1.可以在抽象类和普通类中定义: 2.可以有方法的实现(方法体,即使空的也要声明) 3.被子类继承后,可以重写也也可以不重写: 4.使用关键字virtrual修饰: