代码
import java.util.Scanner;
public class Main {
public static void main(String[] args){
// 创建 Scanner 对象,用于从键盘读取输入
Scanner scanner=new Scanner(System.in);
// 读取整行输入
String sentence=scanner.nextLine();
//使用正则表达式\\s+将句子按空白字符(空格、制表符等)拆分成单词数组。
String []words=sentence.split("\\s+");
int total=0;
// 累加所有单词的长度
for(String word : words){
total += word.length();
}
// 计算平均词长
double averageLength=(double)total/ words.length;
// 输出结果,保留两位小数
System.out.printf("%.2f",averageLength);
scanner.close();
}
}
我的笔记:
一、在Java中,Scanner
类提供了多种方法来读取不同类型的输入数据。常见的方法包括nextLine()
, next()
, nextInt()
, nextDouble()
等等。它们之间的主要区别在于读取数据的方式和处理换行符(newline character)的方式。下面是每个方法的详细说明:
1. nextLine()
- 描述: 读取一整行输入,包括行中的所有字符,直到遇到换行符。
- 用法:
String line = scanner.nextLine();
- 特点:
- 读取输入缓冲区中的所有字符,直到遇到换行符为止。
- 返回一个包含所读取内容的字符串,不包含换行符本身。
2. next()
- 描述: 读取一个单词(以空白字符为分隔符)。
- 用法:
String word = scanner.next();
- 特点:
- 读取输入缓冲区中的下一个标记(token),默认情况下,标记是由空白字符(空格、制表符等)分隔的。
- 不会读取换行符。
- 如果在使用
next()
之后调用nextLine()
,需要小心处理,因为next()
不会消耗换行符,可能会导致问题。
3. nextInt()
- 描述: 读取一个整数。
- 用法:
int number = scanner.nextInt();
- 特点:
- 读取输入缓冲区中的下一个整数。
- 如果输入的下一个标记不是合法的整数,将抛出
InputMismatchException
。 - 换行符不会被读取,需要注意在连续读取不同类型输入时,可能需要额外处理换行符。
4. nextDouble()
- 描述: 读取一个浮点数。
- 用法:
double number = scanner.nextDouble();
- 特点:
- 读取输入缓冲区中的下一个浮点数。
- 如果输入的下一个标记不是合法的浮点数,将抛出
InputMismatchException
。 - 同样地,换行符不会被读取。
注意事项
处理换行符: 当混用nextLine()
和其他nextXXX()
方法时,可能会遇到问题。原因是nextXXX()
方法不会消耗换行符,而nextLine()
会读取整行数据包括之前输入的换行符。在这种情况下,可以在调用nextLine()
前后进行适当处理,比如在调用nextInt()
或next()
之后加上一个额外的nextLine()
来消耗换行符。
例如:
int number = scanner.nextInt();
scanner.nextLine(); // 消耗换行符
String line = scanner.nextLine();
通过了解这些方法的区别和使用场景,可以更有效地处理用户输入。
二、String[] words = sentence.split("\\s+");
这行代码的作用是将字符串 sentence
按照一个或多个空白字符(包括空格、制表符和换行符等)进行拆分,并将结果存储到一个字符串数组 words
中。下面是具体的解析:
详细说明
-
sentence
:这是一个包含要拆分的文本的字符串变量。 -
split("\\s+")
:split
方法是String
类的一部分,用于基于一个正则表达式将字符串拆分成一个字符串数组。"\\s+"
是用于拆分的正则表达式:\\s
表示任何空白字符,包括空格、制表符、换行符等。+
表示一个或多个。因此,\\s+
匹配一个或多个连续的空白字符。
-
结果:
split
方法根据正则表达式\\s+
将sentence
拆分成若干段,每段之间由一个或多个空白字符分隔。- 返回的结果是一个字符串数组
words
,其中每个元素是sentence
中被空白字符分隔的部分。
示例
假设 sentence
是 "This is a test sentence."
,执行以下代码:
String sentence = "This is a test sentence.";
String[] words = sentence.split("\\s+");
split
方法会将sentence
按空白字符拆分。结果是一个字符串数组words
,它包含以下元素:words[0]
为"This"
words[1]
为"is"
words[2]
为"a"
words[3]
为"test"
words[4]
为"sentence."