2. 编写一个程序,程序实现对用户指定的文本文件中的英文字符和字符串的个数进行统计的功能,并将结果根据用户选择输出至结果文件或屏幕。 1)构建统计类,该类实现对I/O的操纵;实现对文本文件中英文字符、字符串的统计;实现对统计结果的输出。 构建测试类,该类实现与用户的交互,向用户提示操作信息,并接收用户的操作请求
时间: 2024-02-11 10:09:10 浏览: 117
好的,以下是一个Java程序,可以实现对用户指定的文本文件中的英文字符和字符串的个数进行统计的功能,并且根据用户选择将结果输出至结果文件或屏幕。包含一个统计类和一个测试类。
统计类 FileAnalyzer.java:
```java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class FileAnalyzer {
private String inputFilePath;
private String outputFilePath;
private int charCount;
private int wordCount;
public FileAnalyzer(String inputFilePath, String outputFilePath) {
this.inputFilePath = inputFilePath;
this.outputFilePath = outputFilePath;
this.charCount = 0;
this.wordCount = 0;
}
public void analyze() throws IOException {
// 创建一个File对象
File inputFile = new File(inputFilePath);
// 创建一个BufferedReader对象,用于读取文件内容
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
// 逐行读取文件内容,直到读到最后一行
String line;
while ((line = reader.readLine()) != null) {
// 更新字符计数器,统计每行中的英文字符个数
charCount += countChars(line);
// 更新字符串计数器,统计每行中的英文字符串个数
wordCount += countWords(line);
}
// 关闭文件读取器
reader.close();
}
public void outputResult() throws IOException {
if (outputFilePath == null) {
// 如果输出路径为空,则输出到屏幕
System.out.println("英文字符数:" + charCount);
System.out.println("英文字符串数:" + wordCount);
} else {
// 否则输出到指定文件
PrintWriter writer = new PrintWriter(new FileWriter(outputFilePath));
writer.println("英文字符数:" + charCount);
writer.println("英文字符串数:" + wordCount);
writer.close();
}
}
/**
* 统计指定字符串中的英文字符个数
*
* @param str 指定字符串
* @return 英文字符个数
*/
private static int countChars(String str) {
int count = 0;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
// 如果是英文字母,则计数器加1
count++;
}
}
return count;
}
/**
* 统计指定字符串中的英文单词个数
*
* @param str 指定字符串
* @return 英文单词个数
*/
private static int countWords(String str) {
int count = 0;
String[] words = str.trim().split("\\s+");
for (String word : words) {
if (word.matches("[A-Za-z]+")) {
// 如果是英文单词,则计数器加1
count++;
}
}
return count;
}
}
```
测试类 FileAnalyzerTest.java:
```java
import java.io.IOException;
import java.util.Scanner;
public class FileAnalyzerTest {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要分析的文本文件路径:");
String inputFilePath = scanner.nextLine();
System.out.print("请输入结果输出路径(不输出结果请直接回车):");
String outputFilePath = scanner.nextLine();
// 创建FileAnalyzer对象,并进行分析
FileAnalyzer analyzer = new FileAnalyzer(inputFilePath, outputFilePath);
analyzer.analyze();
// 输出分析结果
System.out.print("请选择输出结果的方式(1.屏幕 2.文件):");
int choice = scanner.nextInt();
if (choice == 1) {
analyzer.outputResult();
} else if (choice == 2) {
analyzer.outputResult();
System.out.println("结果已输出至文件:" + outputFilePath);
} else {
System.out.println("无效的选择!");
}
scanner.close();
}
}
```
这个程序的基本思路是:读取用户指定的文本文件,逐行统计每行中的英文字符和英文单词数,并将统计结果输出到屏幕或指定文件。具体实现细节如下:
1. 通过控制台输入获取用户指定的文本文件路径和结果输出路径。
2. 创建一个FileAnalyzer对象,用于对指定文本文件进行分析。
3. 调用FileAnalyzer对象的analyze()方法,进行分析。
4. 通过控制台输入选择输出结果的方式(屏幕或文件)。
5. 调用FileAnalyzer对象的outputResult()方法,输出分析结果。
6. 如果结果输出到文件,则输出完成信息。
7. 关闭输入流。
阅读全文