scanner的相关知识笔记

首先,scanner的next()与nextxxx()都是焦点不会移动到下一行,仍然处在这一行上。

其次,scanner的常见方法有三个:

hasNextXxx()  判断是否还有下一个输入项,其中Xxx可以是Int,Double等。如果需要判断是否包含下一个字符串,则可以省略Xxx
nextXxx()  获取下一个输入项。Xxx的含义和上个方法中的Xxx相同,默认情况下,Scanner使用空格,回车等作为分隔符。遇到空格,Tab,Enter,会继续等待,直到获得相应类型相应的值。

nextLine():当使用nextLine()方法时会读取该行从前到末尾的所有的内容,包括换行符,然后把焦点移动到下一行的开头。

组合使用时会出现的问题

一、在next()、nextInt()与nextLine()一起使用时,next()、nextInt()往往会读取部分数据(会留下"\n"或者空格之后的数据)。

读取数字也可以使用nextLine(),不过需要转换:Integer.parseInt(cin.nextLine())。

例如:

package com.jiuzhou.ceo;

import java.util.Scanner;

public class MyScanner {
   
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个整数");
		int i = sc.nextInt();
		System.out.println("i="+i);
		System.out.println("请输入一个字符串");
		String s = sc.nextLine();
		System.out.println("s="+s);
		
	}
	

}

/*结果:
 * 请输入一个整数
   100
   i=100
     请输入一个字符串
   s=
   */
public class MyScanner {
   
	public static void main(String[] args) {
		/*
		 * nextInt()是键盘录入整数的方法,当我们录入10的时候
		 * 其实在键盘上录入的是10和\r\n,nextInt()方法只获取10就结束了
		 * nextLine()是键盘录入字符串的方法,可以接收任意类型,但是他凭什么能获取一行呢?
		 * 通过\r\n,只要遇到\r\n就证明一行结束
		 */
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入第一个整数:");
		int i = sc.nextInt();
		System.out.println("请输入第二个字符串:");
		String line2 = sc.nextLine();
		//System.out.println("i = " + i + ", line2 = " + line2);
		System.out.println(i);
		System.out.print("11111111111");//该处无换行符
		System.out.print(line2);
		System.out.println("2222222222222");
		
		
	}
	

}

/*结果:
 * 请输入第一个整数:
100
请输入第二个字符串:
100
111111111112222222222222

   */

以上两个例子说明了nextxxx()方法与nextLine()方法共用时出现的问题。

解决方案有二:
        1、,创建两次对象,但是浪费空间
     2,键盘录入的都是字符串,都用nextLine方法,后面我们用整数字符串转换成整数的方法将其转换即可,Integer.parseInt(cin.nextLine())。

猜你喜欢

转载自blog.csdn.net/rngweskt/article/details/82594663