面向txt文件的字符统计工具
四个大字:菜就多练
用IDE建立两个Java类,分别为:公共类StatUtil和窗体类StatFrame,用于提供字符统计的工具方法和展示字符统计工具的界面
话不多说直接上代码,如果觉得代码不错请点个赞点个关注(明示),有三连才能更有动力更新
公共类StatUtil
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.StreamTokenizer;
public class StatUtil {
// 定义一个名为StatUtil的公共类,用于提供字符统计的工具方法
public static int[] statis(String filename) {
// 定义一个名为statis的公共静态方法,接收文件名4932作为参数,并返回一个整型数组作为统计结果
FileReader fileReader = null;
// 初始化文件读取器为null
try {
fileReader = new FileReader(filename);// 尝试打开文件并创建文件读取器
StreamTokenizer stokenizer = new StreamTokenizer(new BufferedReader(fileReader));
// 创建一个流分词器对象,用于将文本分解为标记
stokenizer.ordinaryChar('\'');
stokenizer.ordinaryChar('\"');
stokenizer.ordinaryChar('/');
// 设置分词器的普通字符,避免被错误地作为特殊字符处理
int[] length = new int[4];
// 创建一个包含4个整型元素的数组,用于存储统计结果
String str;
// 用于暂存标记的字符串形式
int numberSum = 0;
int symbolSum = 0;
int wordSum = 0;
int sum = 0;
// 初始化数字总数、符号总数、单词总数和字符总数
while (stokenizer.nextToken() != StreamTokenizer.TT_EOF) {
// 迭代处理文本中的每个标记,直到达到文件末尾
switch (stokenizer.ttype) {
// 根据标记的类型进行不同的处理
case StreamTokenizer.TT_NUMBER:
// 如果是数字类型的标记
str = String.valueOf(stokenizer.nval);
// 将数字值转换为字符串
System.out.println(str);
// 输出该数字的字符串形式
numberSum += str.length() - 2;
// 累加数字总数
length[0] = numberSum;
// 将数字总数存入结果数组中的第一个位置
break;
case StreamTokenizer.TT_WORD:
// 如果是单词类型的标记
str = stokenizer.sval;
// 获取单词的字符串形式
wordSum += str.length();
// 累加单词总数
length[1] = wordSum;
// 将单词总数存入结果数组中的第二个位置
break;
default:
// 如果是其他类型的标记(如符号)
str = String.valueOf((char) stokenizer.ttype);
// 将标记转换为字符串
symbolSum += str.length();
// 累加符号总数
length[2] = symbolSum;
// 将符号总数存入结果数组中的第三个位置
}
}
sum = symbolSum + numberSum + wordSum;
// 计算字符总数
length[3] = sum;
// 将字符总数存入结果数组中的第四个位置
return length;
// 返回统计结果数组
} catch (Exception e) {
// 捕获可能发生的异常
e.printStackTrace();
// 输出异常信息
return null;
// 返回空值表示出现异常
}
}
}
窗体类StatFrame
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class StatFrame extends JFrame {
// 定义一个名为StatFrame的窗口类,用于展示字符统计工具的界面
private JPanel contentPane;
private JTextField pathTextField;
private JTextArea resultTextArea = new JTextArea();
public static void main(String[] args) {
StatFrame frame = new StatFrame();
// 创建StatFrame实例
frame.setVisible(true);
// 设置界面4932可见
}
public StatFrame() {// 构造方法,用于初始化界面和各组件
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 371, 220);
// 设置窗体的关闭操作和大小位置
contentPane = new JPanel();
setContentPane(contentPane);
contentPane.setLayout(null);
// 设置内容面板和布局管理器
setTitle("字符统计工具");
// 设置窗口标题
JPanel panel = new JPanel();
panel.setBounds(0, 0, 355, 262);
contentPane.add(panel);
panel.setLayout(null);
// 创建一个面板并设置布局管理器
JLabel messageLabel = new JLabel("选择文件:");
messageLabel.setBounds(0, 22, 70, 22);
panel.add(messageLabel);
// 添加标签组件用于显示提示信息
pathTextField = new JTextField();
pathTextField.setBounds(63, 23, 202, 21);
panel.add(pathTextField);
// 添加文本框组件用于输入文件路径
JButton chooseButton = new JButton("选择");
chooseButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_chooseButton_actionPerformed(e);
}
});
chooseButton.setBounds(275, 22, 77, 23);
panel.add(chooseButton);
// 添加按钮组件,并注册事件监听器
resultTextArea.setBounds(0, 54, 352, 134);
panel.add(resultTextArea);
// 添加文本区域组件用于显示统计结果
}
private void do_chooseButton_actionPerformed(ActionEvent e) {
// 选择按钮的事件处理方法,用于响应用户选择文件的操作
java.awt.FileDialog fd = new FileDialog(this);
// 创建文件对话框实例
fd.setVisible(true);
// 显示文件对话框
String filePath = fd.getDirectory() + fd.getFile();
// 获取用户选择的文件路径
if (filePath.endsWith(".txt")) {
// 如果选择的文件是txt格式文件
pathTextField.setText(filePath);// 在文本框中显示文件路径
StatUtil util = new StatUtil();// 创建字符统计工具
int[] sum = util.statis(filePath);
// 调用统计方法进行字符统计
int number = sum[0];
int word = sum[1];
int total = sum[2];
int suNumber = sum[3];// 解析统计结果
resultTextArea.setText("统计结果为:\n" + "数字总数:" + number + "\n中文字符字母数(包含文字):" + word + "" +
"\n英文字符字母总数:" + total + "\n字符总数:" + suNumber);
// 在文本域中显示统计结果
}
}
}
以上代码行内都附有详细注释,