目录
1、next()、nextInt()、nextLine()的使用方法及区分
2、循环时如何使用hasNext方法
3、用hasNextInt()作为判断下一个输入是否为数字需要配合next()方法使用
1、next()、nextInt()、nextLine()的使用方法及区分
三者简单定义
next():此方法遇见第一个有效字符(非空格,非换行符)时,开始扫描,遇到第一个分隔符或结束符(空格或换行符)时,结束扫描,获取扫描到的内容,即获得第一个扫描到的不含空格、换行符的单个字符串。如下例:
public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("读入一个字符串:");String s = sc.next();System.out.println(s);}
结果:
nextInt():此方法只读取数值,不会读取空格和换行符,当我们用此方法读取后,再用nextLine()方法读取,会读取到剩余的空格或换行符,如下例:(为什么读入字符串下面,还会输出一个2呢?如果有大佬看到,请不吝赐教!)
public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("读入数字:");int a = sc.nextInt();System.out.println(a);System.out.println("读入字符串:");String s = sc.nextLine();System.out.println(a);}
结果:
nextLine():此方法会扫描到一行内容并作为一个字符串而被获取到,如果要读取带有空格的一串字符串,需要用此方法,如下例:
public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("读入第一个字符串:");String s = sc.next();System.out.println(s);System.out.println("读入第二个字符串:");s = sc.nextLine();System.out.println(s);}
结果:
解决方法:只需在sc.next()后面加上一个sc.nextLine()即可消除该回车,如下:
结果:
例:当你输入一串带空格的字符串,敲下回车后,若最开始碰到sc.next(),sc.next()只会读取第一个不是空格的单词。例如下例,当sc.next读完hello后,读取的cursor是在空格前,导致读取的nextLine长度是6。
2、循环时如何使用hasNext方法
遇到hasNext()时,Scanner会阻塞,等待用户输入,等你输入后返回true,若没有,会一直阻塞等待用户输入
如下代码,你需要先先输入,才会进入while循环,才会显示“请输入”
当我们想退出用hasNext做条件的while循环时,方法一是在控制台手动输入Ctrl+Z;方法二while(!sc.hasNext("#"))约定当一行输入#时退出,如下:
3、用hasNextInt()作为判断下一个输入是否为数字需要配合next()方法使用
hasNextInt()函数大体意思表示scanner当前的标记的输入是否为int,并不会自动的移动标记。
例如实现一个判断当前输入是否为数字,不是的话提示请输入数字,因为该函数不会自动的移动标记,所以就会死循环输出“请输入数字”,如下代码
要实现hasNextInt()的读取的标记位置的改变,可以用sc.next()移动
解决代码:
该笔记参考自博主:weixin_41262453
仅供自己学习使用