首先,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())。