源码:
package pers.liqin.tongji.danci; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.util.HashMap; import java.util.Iterator; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TongJi { public static String inputString = new String(); //inputString 键盘输入的字符串 public static String filePath = new String("D:/学习/java/content.txt"); //filePath 文件存储路径 public static String fileContent = new String(); //fileContent 文件内容 public static HashMap<String, Integer> wordsCount = new HashMap<String, Integer>(); //wordsCount 存放单词和对应数目的HashMap /** * <p> * Title: main * </p> * <p> * Description:main方法,程序的入口 * </p> * * @param args * */ public static void main(String[] args) { input(); try { writeFile(inputString, filePath); fileContent = readFile(new File(filePath)); } catch (Exception e) { e.printStackTrace(); } output(fileContent); } public static void input() { System.out.println("请输入要保存到txt中的内容:"); Scanner scanner = new Scanner(System.in); inputString = scanner.nextLine(); scanner.close(); System.out.println("文本扫描成功!"); } /** * <p> * Title: output * </p> * <p> * Description:统计输出单词和其对应数目 * </p> * * @param outputString * */ public static void output(String outputString) { countWords(); System.out.println("输入的文本中共有" + wordsCount.size() + "个英语单词。"); System.out.println("统计分析如下(已忽略大小写):"); for (Iterator<String> iterator = wordsCount.keySet().iterator(); iterator .hasNext();) { String words = (String) iterator.next(); int num1 = wordsCount.get(words); System.out.println(""" + words + ""出现了" + num1 + "次"); } } /** * <p> * Title: countWords * </p> * <p> * Description:用HashMap保存每个单词出现的次数 * </p> * */ public static void countWords() { Pattern expression = Pattern.compile("[a-zA-Z]+");// 定义正则表达式匹配单词 String string1 = fileContent.toLowerCase();// 转换成小写 Matcher matcher = expression.matcher(string1); String word = null;// 文章中的单词 while (matcher.find()) {// 是否匹配单词 word = matcher.group();// 得到一个单词-树映射的键 if (wordsCount.containsKey(word)) { wordsCount.put(word, wordsCount.get(word) + 1); } else { wordsCount.put(word, 1); } } } /** * <p> * Title: writeFile * </p> * <p> * Description:写入文件 * </p> * * @param str * 要保存的内容 * @param savePath * 保存的文件路径 * @throws Exception * 找不到路径 * */ public static void writeFile(String str, String savePath) throws Exception { System.out.println("txt保存路径是:" + savePath); BufferedWriter bw = new BufferedWriter(new FileWriter(savePath)); System.out.println("txt创建成功!"); bw.write(str); System.out.println("文本内容存储到txt中成功!"); bw.close(); } /** * <p> * Title: readFile * </p> * <p> * Description:读取文件 * </p> * * @param file * @return 文件内容 * @throws Exception * */ public static String readFile(File file) throws Exception { BufferedReader br = new BufferedReader(new FileReader(file)); System.out.println("打开文件成功!"); StringBuffer sbf = new StringBuffer(""); String line = null; while ((line = br.readLine()) != null) { sbf.append(line).append(" ");// 按行读取,追加换行 } System.out.println("文件内容读取成功!"); br.close(); return sbf.toString(); } }
截图:
感想:本次编程本想着自己很难完成,但将问题分解开主要是要实现两个功能:1,将英语文章输入文件中,2,判断文章中单词重复出现的次数、第一个功能好办,我很快就把相关的代码写出来了,第二个功能如何实现我没有头绪,于是从网上查找相关的代码,判断并理解他们的代码最终与自己的代码相结合经过反复的修改终于实现了这个功能。我认为我在平时应该多看多学习他人写的代码,这样自己的编程能力才会提高。