问题:
利用Scanner从控制台获取多个数据时,第一个为数值,第二个为字符串,从控制台输入第一个数据,回车,还未输入第二个数据就直接停止输入,输出结果只显示数字的问题!
参考代码:
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
String s=sc.nextLine();
System.out.println("a:"+a+",s:"+s);
}
}
运行结果:
为什么会出现这个问题?
分析:
API中描述Scanner:
一个简单的文本扫描仪,可以使用正则表达式解析基本类型和字符串。
注:即当输入12回车则自动识别为int赋值给a,若为string类型则赋值给string类型。
在输入12回车,则自动识别12赋值给a,而回车则为\n\r,识别为字符串,则自动赋值给s,而回车在控制台上又不显示,那么给我们的感觉则是,只输入了一个就直接停止输入了。
解决方案:
- 先获取一个数值后,再创建一个新的键盘录入对象获取字符串。(不推荐)
- 把所有的数据都先按照字符串获取,然后再使用时需要什么类型就转换成什么类型!(推荐)
如何转换?
(1). String转Int
String s1=sc.nextLine();
int b=Integer.parseInt(s1);
(2). String转其他
String s1=sc.nextLine();
X b=Y.parseX(s1);
注:其中X为基本类型(double、float、long、byte、boolean),Y为基本类(Double、Float、Long、Byte、Boolean)等;
(3). String转char
String s1=sc.nextLine();
char[] chs=s1.toCharArray();