天天看点

BufferedReader、PrintWriter自动行刷新、FileWriter 追加文本、HashSet、String的综合运用案例

题目要求:统计指定文本中各Java关键词出现的次数,并将统计结果写出到自定义的文本文件中。文件名由控制台输入。要求采用Set集合存储所有Java关键词。

源代码:(只示例了部分Java关键词的统计结果,读者可在String数组中自行添加进所有关键词)

package com.sina.skynomy.works;
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.util.Arrays; 
import java.util.HashSet; 
import java.util.Iterator; 
import java.util.Scanner; 
import java.util.Set; 
/** 
* 统计Java关键词在文本中出现的次数 
* @author sknomy 
* 
*/ 
public class CalculateKeyword { 
    public static void main(String[] args) throws IOException { 
        System.out.println("请输入要统计Java关键词个数的文件名:"); 
        Scanner scanner = new Scanner(System.in); 
        //从控制台输入文件名称 
        String file = scanner.nextLine(); 
        //定义String数组,并赋给Java关键词 
        String[] keywords = {"public","new","null","while","void","static","class"}; 
        //通过数据工具类Arrays将String数组转成List集合,并作为参数创建一个Set规则集 
        Set<String> set = new HashSet<String>(Arrays.asList(keywords)); 
        //通过Iterator迭代器遍历Set集合中的元素 
        Iterator<String> it = set.iterator(); 
        while(it.hasNext()) { 
            //String keyword表示Set集合中的元素,即Java关键字 
            String keyword = it.next(); 
            //表示BufferedReader对象在文本中读取的一行字符串,初始化为null 
            String line = null; 
            //Java关键词在文本中出现的次数,初始化为0 
            int num=0; 
            readFile(file, keyword, line, num); 
        } 
    } 
    /** 
     * 统计某个Java关键词在文本中出现的次数 
     * @param file 
     * @param keyword 
     * @param line 
     * @param num 
     * @throws IOException 
     */ 
    public static void readFile(String file,String keyword,String line,int num) throws IOException { 
        //创建缓冲输入流,读取src/com/sina/skynomy/works文件夹下文件名为file的文件 
        BufferedReader reader = new BufferedReader( 
                new InputStreamReader( 
                        new FileInputStream("src"+File.separator+ 
                                            "com"+File.separator+ 
                                            "sina"+File.separator+ 
                                            "skynomy"+File.separator+ 
                                            "works"+File.separator+file) 
                ) 
        ); 
        
        PrintWriter pw = new PrintWriter( 
                        new FileWriter("src"+File.separator+ 
                                        "com"+File.separator+ 
                                        "sina"+File.separator+ 
                                        "skynomy"+File.separator+ 
                                        "works"+File.separator+"Keywords.txt",true)//设置在文本中追加内容 
        ,true);//设置自动行刷新 
        
        //按行读取文本,直到读取到文本末尾 
        while((line=reader.readLine())!=null){ 
            //某个Java关键词在文本某一行中第一次出现的位置 
            int first = line.indexOf(keyword); 
            while(first > 0) { 
                //从first位置截取字串并重新获得某Java关键词第一次出现的位置 
                first = line.substring(first).indexOf(keyword); 
                //统计某Java关键词在文本中出现的次数 
                num++; 
            } 
        } 
        System.out.println(keyword+"一共出现了"+num+"次"); 
        pw.println(keyword+": 出现了"+num+"次"); 
        pw.close(); 
    } 
}
           

控制台信息如下:

BufferedReader、PrintWriter自动行刷新、FileWriter 追加文本、HashSet、String的综合运用案例

运行程序后文本中的内容:

BufferedReader、PrintWriter自动行刷新、FileWriter 追加文本、HashSet、String的综合运用案例

继续阅读