使用Scanner类和正则表达式解析字符串"数学:87.5分,物理:76.5分,英语:97分"中的考试成绩,并计算出总成绩,其中课程门数和课程名不确定。 输入为一字符串,输出为浮点数,精确度一位小数。 ============================== 输入样例: 数学:87.5分,物理:76.5分,英语:97分 输出样例: 261.0
时间: 2023-07-24 21:42:51 浏览: 152
以下是示例代码:
```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().trim();
Pattern pattern = Pattern.compile("\\d+(\\.\\d+)?");
Matcher matcher = pattern.matcher(input);
double sum = 0.0;
while (matcher.find()) {
sum += Double.parseDouble(matcher.group());
}
System.out.printf("%.1f", sum);
}
}
```
代码思路:
1. 读入一行字符串并去除两端的空格;
2. 定义一个正则表达式来匹配字符串中的浮点数,即 `\d+(.\d+)?`;
3. 利用 Matcher 对象在字符串中查找匹配的子串,将每个子串转换成浮点数并累加到总成绩中;
4. 最后输出总成绩,保留一位小数。
相关问题
用Java使用Scanner类和正则表达式解析字符串"数学:87.5分,物理:76.5分,英语:97分"中的考试成绩,并计算出总成绩,其中课程门数和课程名不确定。 输入为一字符串,输出为浮点数,精确度一位小数。
可以使用Java的Scanner类和正则表达式来解析字符串,具体代码如下:
```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);
System.out.print("请输入考试成绩:");
String input = scanner.nextLine();
Pattern pattern = Pattern.compile("(\\d+(\\.\\d+)?)分");
Matcher matcher = pattern.matcher(input);
double totalScore = 0.0;
while (matcher.find()) {
double score = Double.parseDouble(matcher.group(1));
totalScore += score;
}
System.out.printf("总成绩为:%.1f\n", totalScore);
}
}
```
这个程序首先创建了一个Scanner对象,用来读取用户输入的字符串。然后使用正则表达式匹配字符串中的考试成绩,将每个成绩解析为一个浮点数并累加到总成绩中。最后输出总成绩。
运行程序,输入字符串"数学:87.5分,物理:76.5分,英语:97分",输出结果为:261.0。
使用Scanner类和正则表达式解析字符串"数学:87.5分,物理:76.5分,英语:97分"中的考试成绩,并计算出总成绩,其中课程门数和课程名不确定。 输入为一字符串,输出为浮点数,精确度一位小数。
好的,可以使用 Scanner 类的 findInLine 方法来找到符合正则表达式的字符串,然后再进行解析。以下是代码示例:
```java
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
scanner.close();
double totalScore = 0.0;
int courseCount = 0;
Pattern pattern = Pattern.compile("(\\d+\\.?\\d*)分");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
double courseScore = Double.parseDouble(matcher.group(1));
totalScore += courseScore;
courseCount++;
}
if (courseCount > 0) {
double avgScore = totalScore / courseCount;
System.out.printf("%.1f\n", avgScore);
} else {
System.out.println("No score found.");
}
}
}
```
这个程序中,我们先从标准输入读入一行字符串,然后使用正则表达式 `(\\d+\\.?\\d*)分` 来匹配成绩字符串,其中 `(\\d+\\.?\\d*)` 表示一个或多个数字(包括小数点),后面跟着 "分" 两个字。在 while 循环中,我们使用 group(1) 方法来获取第一个括号里的匹配结果,也就是成绩字符串中的数字部分。最后,我们计算出总成绩和课程门数,求出平均成绩并输出。
阅读全文
相关推荐













