用java在文本文件bigbook.txt中包含有很长篇幅的英语短文,编写程序要求统计文件的所有短文中包含英文字母“A”的个数,并显示统计的时间(要求使用两种方法
时间: 2023-06-10 13:05:27 浏览: 86
)。
答:好的,我能理解您的问题。以下是两种方法来编写这个程序。
方法一:
我们可以使用Java中的Scanner和File类来读取文本文件并逐个字符地检查每个字符是否为A。然后,我们可以增加一个计数器来记录找到了多少个A。下面是一个可能的实现:
```java
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class CountAInFile {
public static void main(String[] args) {
long startTime = System.currentTimeMillis(); // 获取开始时间
int count = 0; // 统计A的个数
try {
File file = new File("bigbook.txt"); // 打开文件
Scanner scanner = new Scanner(file);
while(scanner.hasNextLine()) {
String line = scanner.nextLine(); // 读取一行
count += countA(line); // 统计这一行包含多少个A
}
scanner.close(); // 关闭文件
} catch (FileNotFoundException e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis(); // 获取结束时间
System.out.println("A的个数:" + count);
System.out.println("统计用时:" + (endTime - startTime) + "毫秒");
}
public static int countA(String line) {
int count = 0;
for(int i = 0; i < line.length(); i++) {
if(line.charAt(i) == 'A' || line.charAt(i) == 'a') { // 统计'A'和'a'
count++;
}
}
return count;
}
}
```
方法二:
另一个方法是使用Java 8中引入的新流API。我们可以读取文件行并将它们组成一个流,对每行进行分割,然后统计每行中包含多少个A。下面是一个可能的实现:
```java
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class CountAInFile2 {
public static void main(String[] args) throws IOException {
long startTime = System.currentTimeMillis(); // 获取开始时间
int count = Files.lines(Paths.get("bigbook.txt")) // 逐行读取文件
.flatMapToInt(l -> l.chars()) // 分割每行为字符流
.map(c -> (char)c) // 转换为字符流
.filter(c -> c == 'A' || c == 'a') // 过滤得到A或a
.mapToInt(c -> 1) // 转换为int类型的1
.sum(); // 求和
long endTime = System.currentTimeMillis(); // 获取结束时间
System.out.println("A的个数:" + count);
System.out.println("统计用时:" + (endTime - startTime) + "毫秒");
}
}
```
这两种方法都可以统计文件中包含A的个数,但方法二利用了Java 8的新特性和流API,使代码更加简洁和易于理解。希望能够满足您的需求!