Java Scanner 类
java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。
1.使用前需要导入Scanner工具包:
import java.util.Scanner;
2. 创建 Scanner 对象的基本语法:
Scanner input = new Scanner(System.in);
//创建了一个叫input的Scanner对象
注:
import是输入的意思。
util,utiliy的缩写,意即,工具性的包。主要包含集合类(如ArrayList,HashMap等),随机数产生类,属性文件读取类,定时器类等类。
Scanner,扫描仪,使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。
next方法:
1)next() :读取不全带空格的字符串(<过滤前面遇到的空格等非有效字符>,直到读取有效字符后结束读取)
2)nextLine() : 可以完全读取带空格的字符串
(以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符)
3)nextInt() :读取int型数字
4)nextFloat() :读取float型数字
5)nextLong() :读取long 型数字
6)nextDouble() :读取double型数字
…
读取之前都最好使用**hasNext+首字母大写的类型名()**来进行验证读取之前输入是否合法(这种方法比下面谈到的try catch更好理解~)
例如:(注意main函数括号中应该写成String [] args,阿里巴巴java开发手册中提的这点,[]是String 数组的一部分,之前我写的不规范,现在更正了,截图更新了)
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("next方式:");
if(input.hasNext()) {
String s1 = input.next() ;
System.out.println("input string is " + s1);
}
input.close();
}
}
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
System.out.println("nextInt方式:");
boolean falseInput = true;
while(falseInput) {
Scanner input = new Scanner(System.in);
if (!input.hasNextInt()) {
System.out.println("input is not An integer number");
continue;
}
else {
int s2 = input.nextInt();
System.out.println("input integer num is " + s2);
falseInput = false;
}
input.close();
}
}
}
上面代码的测试:
*3.如果使用时出现提示:**Resource leak :‘scanner’ is never closed,*需要加上Scannner对象名.close();(一般都是成对使用,放在同一个方法(如果存在循环要放在同一个循环里)<函数>里面)
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个数:");
int a = scanner.nextInt();
System.out.printf("%d的平方是%d\n", a, a * a);
scanner.close();
}
}
**
try catch捕获不合法输入
**
结构示例:
try {
d = input.nextInt();
}catch(Exception e) {
System.out.println("输入有误!");
/*如果捕获到异常输入(就此而言输入的不是int整数)*/
continue;}/*直到没有捕获到异常*/
//
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
int d = 0;
boolean falseInput = true;
while(falseInput){
System.out.println("请输入一个整数:");
Scanner input = new Scanner(System.in);
try {
d = input.nextInt();
}catch(Exception e) {
System.out.println("输入有误!");/*如果捕获到异常输入(就此而言输入的不是int整数)*/
continue;
}/*直到没有捕获到异常*/
falseInput = false;
}
System.out.println("input num is : "+d);
}
}
测试:
注意:
如果Scanner input = new Scanner(System.in);
放在了while之前,一旦输入异常将陷于死循环.