使用Scanner类和正则表达式解析字符串"数学:87.5分,物理:76.5分,英语:97分"中的考试成绩,并计算出总成绩,其中课程门数和课程名不确定。 输入为一字符串,输出为浮点数,精确度一位小数。 ============================== 输入样例: 数学87.5分,物理76.5分,英语97分 输出样例: 261.0
时间: 2023-07-24 09:22:02 浏览: 147
以下是代码实现:
```java
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
Pattern pattern = Pattern.compile("(\\d+\\.?\\d*)分");
Matcher matcher = pattern.matcher(input);
double sum = 0.0;
while (matcher.find()) {
sum += Double.parseDouble(matcher.group(1));
}
System.out.printf("%.1f", sum);
}
}
```
解释一下代码:
1. 通过 `Scanner` 类获取用户输入的字符串。
2. 使用正则表达式 `"(\\d+\\.?\\d*)分"` 匹配字符串中的数字和小数点,其中 `(\\d+\\.?\\d*)` 表示匹配一个或多个数字,可能包含一个小数点,再跟上一个或多个数字;`分` 表示匹配字符串结尾的 `分` 字符。
3. 使用 `Pattern` 类和 `Matcher` 类进行正则表达式匹配,得到所有匹配的字符串。
4. 将匹配到的数字字符串转换成浮点数,并累加求和。
5. 使用 `%f` 格式化输出结果,`.1` 表示保留一位小数。
阅读全文