一,github地址
https://github.com/lc-xie/WordCount
二,PSP表格
|
三,思路
- 先将基本功能实现,再考虑扩展功能
- 实现WordCountTool工具类,这个类用于计算各种数值,将结果写入文件
- 实现命令行参数解析
四,程序的实现过程
程序只实现了基本功能,包含两个类,一个Main类和一个工具类。在Main类中获取输入,并将数据传入工具类进行计算,工具类有两个函数,一个用于计算单词数、行数和字符数,一个用于输出结果到文件。
五,代码
1、main函数
第一步获取目标文件的地址
第二步获取操作序列
第三步获取导出结果的文件地址,若不导出则直接回车
第四步调用工具类进行计算
import java.io.File; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.print("请输入目标文件地址:"); String filePath=scanner.nextLine(); System.out.print("请输入操作需求(以空格隔开,如:c l):"); String[] charArr=scanner.nextLine().split(" "); System.out.print("若需要输出到本地文件,请输入目标文件地址,不需要请直接回车:"); String outputFile=scanner.nextLine(); File file=new File(outputFile); CountTool countTool=new CountTool(); countTool.count(filePath); for (String c:charArr){ switch (c){ case "c": System.out.println("字符数:"+countTool.charCount); break; case "l": System.out.println("行数:"+countTool.lineCount); break; case "w": System.out.println("单词数:"+countTool.wordCount); break; default:break; } } if (file.exists()){ countTool.ouputToFile(file,charArr); } } }
2、CountTool类
主要存有三个计算结果的变量和两个函数
/** * Created by stephen on 18-3-19. * 统计文件的单词数,字符数,行数 */ public class CountTool { private String aimFile; public int lineCount=0;//行数 public int charCount=0;//字符数 public int wordCount=0;//单词数 ..... }
3、count()函数
此函数用于计算行数、单词数和字符数
首先判断目标文件是否存在,不存在则输出“目标文件不存在!请重新输入”并返回
然后一行行读文件,每读一行,lineCount++;同时通过s.length计算本行的字符数,再通过遍历循环找到所有的“ ”和‘,"来判断单词数量。
最后关闭文件读写流。
/** * 计算各个值 * @param filePath 代码文件的路径 */ public void count(String filePath){ try { File file=new File(filePath); if (!file.exists()){ System.out.println("目标文件不存在!请重新输入"); return; } aimFile=file.getName(); FileInputStream fis=new FileInputStream(file); InputStreamReader isr=new InputStreamReader(fis, "UTF-8"); BufferedReader br = new BufferedReader(isr); String s=""; while ((s=br.readLine())!=null) { charCount += s.length();//字符个数就是字符长度 //wordCount += s.split(" ").length;//split() 方法用于把一个字符串分割成字符串数组,字符串数组的长度,就是单词个数 for (int i=1;i<s.length();i++){ if ((s.charAt(i)==‘ ‘&&s.charAt(i-1)!=‘ ‘&&s.charAt(i-1)!=‘,‘)|| (s.charAt(i)==‘,‘&&s.charAt(i-1)!=‘ ‘&&s.charAt(i-1)!=‘,‘)){ wordCount++; } if (s.charAt(i)!=‘ ‘&&s.charAt(i)!=‘,‘&&i==s.length()-1)wordCount++; } lineCount++;//因为是按行读取,所以每次增加一即可计算出行的数目 } br.close(); isr.close(); fis.close(); }catch (IOException e){ e.printStackTrace(); } }
4、ouputToFile()函数
将结果输出到指定文件
获取结果后,遍历操作序列,将对应的数据写入
/** * 将数据写入文件 * @param filePath * @param arr 输入的操作数组,‘o‘,‘c‘,‘w‘,‘s‘ * @return */ public boolean ouputToFile(File filePath,String[] arr){ BufferedWriter bw=null; try { FileWriter fw = new FileWriter(filePath.getAbsoluteFile()); bw = new BufferedWriter(fw); }catch (IOException e){ e.printStackTrace(); return false; } for (String c:arr){ switch (c){ case "c": try { bw.write(aimFile+",字符数:"+charCount+‘\\n‘); }catch (IOException e){ e.printStackTrace(); return false; } break; case "l": try { bw.write(aimFile+",行数:"+lineCount+‘\\n‘); }catch (IOException e){ e.printStackTrace(); return false; } break; case "w": try { bw.write(aimFile+",单词数:"+wordCount+‘\\n‘); }catch (IOException e){ e.printStackTrace(); return false; } break; default:break; } } try { bw.close(); }catch (IOException e){ e.printStackTrace(); } return true; }
六,测试设计过程
明天完善
七,参考文献
http://www.cnblogs.com/linjiqin/archive/2011/03/23/1992250.html