一、Scanner类概述
Scanner类是Java中的一个工具类,它提供了一种方便的方式来读取用户输入和文件内容。与其他读取器不同,Scanner类将输入数据分割成单个标记,其中每个标记可被解释为不同类型的数据。Scanner类的优点在于它提供了一些内置函数来解析基本数据类型,也允许开发者使用正则表达式从非结构化文本中解析出数据。
二、Scanner类的创建
要使用Scanner类,需要先创建一个Scanner对象。Scanner可以从多种数据源获取输入,包括从标准输入读取、读取文件、读取字符串、读取网络数据等等。以下示例展示如何从标准输入(System.in)读取数据:
import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个整数:"); int num = scanner.nextInt(); System.out.println("你输入的数字是:" + num); } }
在上面的示例中,我们首先创建了一个Scanner对象,然后通过调用nextInt()方法获取用户输入的整数,并将其保存在变量num中,最后输出用户输入的数字。需要注意的是,Scanner对象在使用完毕后应该关闭,以释放资源。在以上示例中我们没有显式调用Scanner的close()方法,可以通过将Scanner对象放在try-with-resources语句中来自动关闭该对象:
import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { try (Scanner scanner = new Scanner(System.in)) { System.out.println("请输入一个整数:"); int num = scanner.nextInt(); System.out.println("你输入的数字是:" + num); } catch (Exception e) { e.printStackTrace(); } } }
三、Scanner类的读取
Scanner类提供了多个方法来读取输入数据,常用的有nextInt()、nextFloat()、nextDouble()、nextLine()等方法。以下示例演示如何使用nextLine()方法读取一行文本:
import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入几句话(以回车键结束输入):"); String sentence = scanner.nextLine(); System.out.println("你输入的句子是:" + sentence); } }
在上面的示例中,我们使用Scanner对象的nextLine()方法读取输入的一行文本,并将其保存在字符串变量sentence中,最后输出用户输入的句子。运行该程序,输入几句话,程序会输出你输入的完整句子。需要注意的是,nextLine()方法会将回车符和换行符也一同读入,因此如果用户先输入了空行,调用nextLine()方法时会直接返回一个空字符串。
四、Scanner类的区域设置
Scanner类允许调用Locale类中的常量来设置区域信息,以便正确地解析数据。以下示例演示如何使用Scanner类解析某国货币的货币值:
import java.util.Locale; import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner scanner = new Scanner("¥10.5", "¥#0.00", Locale.CHINA); double money = scanner.nextDouble(); System.out.printf("解析的货币值为:%.2f元", money); } }
在以上示例中,我们定义了一个Scanner对象,该对象读取的数据是“¥10.5”,格式字符串为“¥#0.00”,解析区域为中国(Locale.CHINA)。接着我们调用Scanner对象的nextDouble()方法来解析数据,得到的解析结果为10.5。需要注意的是,在中国,货币符号是人民币符号“¥”,在格式字符串中需要添加该符号。
五、Scanner类的异常处理
当输入数据不符合所需的格式时,Scanner类会抛出InputMismatchException异常。因此在使用Scanner类时需要进行异常处理。以下示例演示如何使用try-catch语句处理异常:
import java.util.InputMismatchException; import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个整数:"); try { int num = scanner.nextInt(); System.out.println("你输入的数字是:" + num); } catch (InputMismatchException e) { System.out.println("输入的数据格式不正确,请输入一个整数。"); } } }
在以上示例中,我们使用Scanner对象读取用户输入的数字,如果输入不是整数,程序会抛出InputMismatchException异常。我们在try块中调用nextInt()方法,如果没有抛出异常,则正常输出用户输入的数字。否则,程序会捕获异常并输出提示信息。