Java中scanner使用法则
在Java中,java.util.Scanner
类用于从不同的输入源(如控制台、文件、字符串等)读取用户输入或文本数据,并将其解析为各种类型。以下是使用Scanner类的基本步骤和一些常见方法:
-
导入Scanner类:
import java.util.Scanner;
-
实例化Scanner对象:
- 从标准输入(通常是键盘)读取数据:
Scanner scanner = new Scanner(System.in);
- 从文件读取数据:
File file = new File("path_to_your_file"); Scanner scanner = new Scanner(file);
- 从字符串读取数据:
String inputString = "Hello, world!"; Scanner scanner = new Scanner(inputString);
- 从标准输入(通常是键盘)读取数据:
-
使用Scanner对象进行读取操作:
-
读取整数:
int intValue = scanner.nextInt();
-
读取浮点数:
double doubleValue = scanner.nextDouble();
-
读取字符串(直到遇到空格、制表符或换行符):
String word = scanner.next();
-
读取一行字符串(包括空格和标点符号):
String line = scanner.nextLine();
-
读取布尔值:
boolean boolValue = scanner.nextBoolean();
-
读取其他类型(如字符、字节等),Scanner提供了相应的方法如
nextByte()
、nextShort()
等。
-
-
判断是否还有更多输入:
if (scanner.hasNext()) { // 进行读取操作 }
-
关闭Scanner以释放资源(对于文件输入流是必需的):
scanner.close();
-
注意事项:
- 在实际开发中,应该始终记得处理可能出现的异常,比如
InputMismatchException
,它会在输入的数据与预期类型不匹配时抛出。 - 当需要获取多个值时,可以连续调用 nextXxx() 方法。
- 使用
nextLine()
后再使用nextInt()
或类似方法时,通常需要再次调用nextLine()
来消费掉上一次读取后遗留的换行符,否则下一次的nextLine()
可能会直接返回一个空字符串。
- 在实际开发中,应该始终记得处理可能出现的异常,比如
关于分割代码
split(“\\s+”) 任何空白符
在Java中,String[] words = input.split("\\s+");
这行代码是用来将一个字符串(在这里是input
)按照一系列连续的空白字符进行分割,并将结果存储为字符串数组words
。
-
split
方法是JavaString
类的一个成员方法,它接收一个正则表达式作为参数,根据这个正则表达式来确定分割字符串的位置。 -
\\s
是正则表达式中的特殊字符,代表任何空白符(包括空格、制表符、换行符等)。在Java中,由于字符串字面量中\
本身是转义字符,所以要匹配一个正则表达式的\s
,我们需要写成\\s
。 -
+
在正则表达式中表示前面的元素可以出现一次或多次。所以\\s+
表示的是一个或多个连续的空白字符。
因此,当你对一个字符串执行 input.split("\\s+")
时,它会查找并找出所有连续的空白字符序列,并在这些位置切割字符串。结果是一个字符串数组,其中每个元素都是原字符串中被空白字符分隔开的部分。例如:
String input = "Hello, World! This is a test.";
String[] words = input.split("\\s+");
执行后,words
数组将会包含如下内容:
words[0] = "Hello,"
words[1] = "World!"
words[2] = "This"
words[3] = "is"
words[4] = "a"
words[5] = "test."
split(“ ”) 单个空格
如果你使用 String[] words = input.split(" ");
来分割字符串,并且输入是 "hello world"
(两个单词间有两个空格),split方法会基于单个空格作为分隔符进行拆分。
因此,结果数组 words
将会有两个元素:
words[0] = "hello"
words[1] = " world"
(注意这里"world"前面确实保留了一个空格)
如果你想处理这种情况并消除分隔单词间的多个空格,你应该使用正则表达式来匹配一个或多个连续的空格,就像之前解释的那样:input.split("\\s+")
。这样,无论中间有多少个空格,都会被视为一个分隔符,得到的结果将是:
words[0] = "hello"
words[1] = "world"