又有人问我Java中Scanner中next()和nextLine()区别了
2016-06-08 20:12
260 查看
**两个都是用来接收用户的输入,区别在于:
next()从遇到第一个有效字符(非空格、换行符)开始扫描,遇到第一个分隔符或结束符(空格’ ‘或者换行符 ‘\n’)时结束。 nextLine()则是扫描剩下的所有字符串知道遇到回车为止。**
聪明的你get到了吗?
如果没有,没关系,我们来举个例子,对于如下输入:
解释一下原因
首先对于输入的数据,在计算机中实际表示是这样的,包含三个空格和一个换行符:
aaa bbb ccc \n
netx()函数从遇到的第一个有效的字符a开始扫描,直到遇到第一个空格扫描结束,得到字符串”aaa”
nextLine()函数从空格开始扫描知直到遇到\n符结束,故得到字符串是 ” bbb ccc”,注意这里bbb前面还有一个空格
所以如果要同时使用next和nextLine()时,要慎用,因为联合使用时就是一个整体,next在前,nextLine靠后,扫描接受的是同一行上的字符串,只不过接收的是不同内容罢了。
下面对于sc.nextInt() ,sc.nextDouble等与sc.nextLine()使用时需要注意的问题
next()从遇到第一个有效字符(非空格、换行符)开始扫描,遇到第一个分隔符或结束符(空格’ ‘或者换行符 ‘\n’)时结束。 nextLine()则是扫描剩下的所有字符串知道遇到回车为止。**
聪明的你get到了吗?
如果没有,没关系,我们来举个例子,对于如下输入:
Scanner sc = new Scanner(System.in); //加入输入的是:aaa bbb ccc str1=sc.next(); //str1="aaa" str2=sc.nextline(); //str2=" bbb ccc"
解释一下原因
首先对于输入的数据,在计算机中实际表示是这样的,包含三个空格和一个换行符:
aaa bbb ccc \n
netx()函数从遇到的第一个有效的字符a开始扫描,直到遇到第一个空格扫描结束,得到字符串”aaa”
nextLine()函数从空格开始扫描知直到遇到\n符结束,故得到字符串是 ” bbb ccc”,注意这里bbb前面还有一个空格
所以如果要同时使用next和nextLine()时,要慎用,因为联合使用时就是一个整体,next在前,nextLine靠后,扫描接受的是同一行上的字符串,只不过接收的是不同内容罢了。
下面对于sc.nextInt() ,sc.nextDouble等与sc.nextLine()使用时需要注意的问题
/* 如果要求一次接受一个整数、浮点数和字符串?你会怎么做?? 42 3.1415 Welcome to HackerRank Java tutorials! */ import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int x=sc.nextInt(); double y=sc.nextDouble(); sc.nextLine(); /*to flush the character \n left by method nextDouble()*/ String s= sc.nextLine(); System.out.println("String: "+s); System.out.println("Double: "+y); System.out.println("Int: "+x); } } /* 用户的输入在计算机缓冲区中是这样存储的:42\n3.1415\nWelcome to HackerRank Java tutorials!\n 使用nextInt()读取42结束,剩下\n3.1415\nWelcome to HackerRank Java 使用nextDouble()读取3.1415,剩下\nWelcome to HackerRank Java 如果此时直接用nextLine()读取,该函数遇到换行符\n就结束 所以需要在这之前输入nextLine(),去掉缓冲区的\n,然后再读取 这是由于nextLine()会读取\n之前的所有内容,并去除\n,而nextDouble()等曾不会去除它后面的\n */
相关文章推荐
- java-数组判断为空问题
- 集合01
- 跟王老师学反射(二):Java类的加载、连接和初始化
- 浅析Java注解
- Spring如何配置数据库查询缓存/对象缓存EHCache
- [javaSE] 多线程(守护线程)
- LinkedList源码剖析(JDK6)
- 第二章 JAVA变量类型及语句
- Spring AOP 由浅入深
- JavaSe:ThreadLocal
- Myeclipse中文乱码解决方式
- Struts2,继续java之旅
- 对于Java的入门书籍
- Java 期末复习提纲
- Eclipse 实用快捷键收集
- JVM结构分析
- java动态代理
- Java内存模型介绍
- 关于Spring集成Quartz的concurrent属性
- java.lang.UnsupportedClassVersionError: org/glassfish/jersey/servlet/ServletContainer : Unsupported