题目要求:统计指定文本中各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();
}
}
控制台信息如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICNxEzM1gjMzIzNwMDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
运行程序后文本中的内容: