例如:
我输入{123423as} 它会输出 123423as是整数
我输入{saas 123} 它会输出 saas 123是字符串
但是我输入{ 1243 as } 它会输出 1243 as 是整数
public class A{
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String c1;
System.out.println("请输入你的值:");
while(sc.hasNextLine()) {//判断当前是否有输入,有输入则执行循环
if(sc.hasNextInt()) { //判断输入的是否是int型数据
c1 = sc.nextLine();
System.out.println("这是整数"+c1);
System.out.println("继续请输入你的值:");
continue;
}else {
c1 = sc.nextLine();
System.out.println("这是字符串"+c1);
System.out.println("继续请输入你的值:");
continue;
}
}
}
}
运行结果
请输入你的值:
1234s
这是字符串1234s
继续请输入你的值:
123 as
这是整数123 as
继续请输入你的值:
asd123
这是字符串asd123
继续请输入你的值:
asdq 123
这是字符串asdq 123
继续请输入你的值:
可能是因为使用hasNext()来判断字符串是否为数字不是很恰当的原因,因为hasNext()是判断输入里面是有一个整数可以读取,如果先输入数字,然后输入空格,然后一个字符串,那么hasNext()就判断到输入前面有一个数字可以读取而返回true, 他不是判断整个一行输入是否完全为数字。
判断是否为数字可以使用Integer.parseInt()方法来操作,用一个try-catch括起来,如果出现异常说明输入的一行字符串不是完全是数字,如果正确执行完,则是数字,代码如下:
参考链接:
《Scanner的hasNext、hasNextInt用法》_weixin_41262453的博客-CSDN博客_hasnext和hasnextint
import java.util.Scanner;
public class A {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
String c1;
System.out.println("请输入你的值(输入bye退出):");
c1 = sc.nextLine();
while(!"bye".equals(c1)) {//判断当前是否有输入,有输入则执行循环
int i ;
try {
i= Integer.parseInt(c1);
// System.out.println(1);
}catch ( NumberFormatException e) {
//System.out.println(e.toString());
System.out.println("这是字符串:"+c1);
System.out.println("请输入你的值(输入bye退出):");
c1 = sc.nextLine();
continue;
}
System.out.println("这是整数:"+i);
System.out.println("请输入你的值:");
c1 = sc.nextLine();
// if(sc.hasNextInt()) { //判断输入的是否是int型数据
// c1 = sc.nextLine();
// System.out.println("这是整数"+c1);
// System.out.println("继续请输入你的值:");
// continue;
// }else {
// c1 = sc.nextLine();
// System.out.println("这是字符串"+c1);
// System.out.println("继续请输入你的值:");
// continue;
// }
}
}
}
Scanner默认输入时以空格结束输入