学的最蒙的流来啦!!!
第一阶段:输出某个英文文件中26个字母出现的频率,并由高到低排列,并显示字母出现的百分比,精确到小数点后面两位
//Main.java
package org.example;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
public class Main{
public static void main(String[] args) throws IOException {
//用于指定输出的数据格式
DecimalFormat df=new DecimalFormat("######0.00");
//获取文件
FileInputStream fis = new FileInputStream("HP7.txt");
//以某种指定方式读取
InputStreamReader isr = new InputStreamReader(fis, "gbk");
//主要用于拼接字符串
StringBuffer sb = new StringBuffer();
//拼接字符串的操作
while (isr.ready()) {
sb.append((char) isr.read());
}
isr.close();
fis.close();
int i;
//将StringBuffer类型的数据转换为String类型
String A=sb.toString();
//存储26个字母
String M="abcdefghijklmnopqrstuvwxyz";
String temp = "";
char NUM[]=new char[A.length()];
char X[]=new char[26];
int Y[]=new int[26];
//将上述的大字符串转换为单个字符存储在数组里面
X=M.toCharArray();
for(int k=0;k<26;k++)
{
Y[k]=0;
for(i=0;i<A.length();i++)
{
NUM[i]=A.charAt(i);
if(X[k]==NUM[i]||X[k]==ch(NUM[i]))
{
Y[k]++;
}
}
}
//冒泡排序
double sum=0;
for(i=0;i<25;i++)
for(int k=0;k<25-i;k++)
{
if(Y[k]<Y[k+1])
{
int temp2=Y[k];
Y[k]=Y[k+1];
Y[k+1]=temp2;
char temp3=X[k];
X[k]=X[k+1];
X[k+1]=temp3;
}
}
//计算字母总数
for(i=0;i<26;i++) {
sum=sum+Y[i];
}
for(i=0;i<26;i++)
{
double pin=(Y[i])/sum*100;
System.out.println(X[i]+"个数:"+Y[i]+", 频率为:"+df.format(pin)+"%");
}
}
//转为小写
static char ch(char c){
if(!(c>=97&&c<=122)){
c+=32;
}
return c;
}
}
第二阶段:输出某个文件中最常出现的前N个单词
//Main.java
public class Main{
public static void main(String[] args) throws IOException {
//输入个数
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String s;
//获取到相关文件
BufferedReader br=new BufferedReader(new FileReader("HP7.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("2022.txt"));
StringBuffer sb=new StringBuffer();
//利用StringBuffer拼接字符串
while((s=br.readLine())!=null){
sb.append(s);
}
//将StringBuffer类型数据转换为String类型,并且,将其转为小写表示
String m=sb.toString().toLowerCase();
//匹配由26个字母以及数字组成的字符串
String []ss=m.split("[^a-zA-Z0-9]+");
int count=0;
int num=1;
Map<String,Integer> map=new TreeMap<String,Integer>();
for(int i=0;i<ss.length;i++){
if(map.containsKey(ss[i])){
count=map.get(ss[i]);
map.put(ss[i],count+1);
}
else{
map.put(ss[i],1);
}
}
List<Map.Entry<String,Integer>> list=new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
//降序排序
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
for(Map.Entry<String,Integer> ma:list){
if(num<=n){
System.out.println(ma.getKey()+":"+ma.getValue());
num++;
}
}
br.close();
bw.close();
}
}
一定要记得在使用完之后,关闭文件流,如果不关闭的话,有可能导致出错;并且,会使得内容无法输入到相应的文件中
我为什么会知道?因为我就犯了这样的错误。。。
第三阶段:
1、输出文件中所有不重复的单词,从多到少排序,输出次数同样多的,以字典序排序
2、指定文件目录,对目录下的每一个文件执行1、的操作
3、指定文件目录,能够递归遍历目录下的所有子目录中的文件,对每个文件执行1、的操作
//Main.java---1、
public class Main{
public static void main(String[] args) throws IOException {
//输入要输出的统计行数
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String s;//协助进行拼接字符串的操作
//获取到文件
BufferedReader br = new BufferedReader(new FileReader("HP7.txt"));
//写入到对应文件
BufferedWriter bw = new BufferedWriter(new FileWriter("2022.txt"));
//拼接字符串必须用到的数据类型
StringBuffer sb = new StringBuffer();
//拼接操作
while ((s = br.readLine()) != null) {
sb.append(s);
}
int count = 0;
int num = 1;
//转换为小写
String m = sb.toString().toLowerCase();
//匹配26个字母和相应字符
String[] mm = m.split("[^a-zA-z0-9]+");
Map<String, Integer> map = new TreeMap<String, Integer>();
for (int i = 0; i < mm.length; i++) {
if (map.containsKey(mm[i])) {
count = map.get(mm[i]);
map.put(mm[i], count + 1);
} else {
map.put(mm[i], 1);
}
}
List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
//降序排序
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
//遍历结果
for(Map.Entry<String,Integer> ma:list){
if(num<=n) {
bw.write(ma.getKey() + ":" + ma.getValue());
bw.newLine();
System.out.println(ma.getKey() + ":" + ma.getValue());
num++;
}
else break;
}
bw.close();
br.close();
}
}
这一块儿并不是很理解,转战讲解啦!
//Main.java---2、3、
public class Main{
public static void main(String[] args) throws IOException {
String s;
File file=new File("D:\\Study\\Code\\JavaWeb\\IDEA\\tt1021");
fileName(file);
}
public static void fileName(File file) throws IOException {
File[] listfiles=file.listFiles();
for(File ff:listfiles){
if(ff.isDirectory()){
fileName(ff);
}
else{
System.out.println(ff);
String s;
int count=0;
int num=1;
BufferedReader br=new BufferedReader(new FileReader(ff));
StringBuffer sb=new StringBuffer();
while((s=br.readLine())!=null){
sb.append(s);
}
String m=sb.toString().toLowerCase();
String[] mm=m.split("[^a-zA-z0-9]+");
Map<String,Integer> map=new TreeMap<String,Integer>();
for(int i=0;i<mm.length;i++){
if(map.containsKey(mm[i])){
count=map.get(mm[i]);
map.put(mm[i],count+1);
}else{
map.put(mm[i],1);
}
}
List<Map.Entry<String,Integer>> list=new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
for(Map.Entry<String,Integer> ma:list){
System.out.println(ma.getKey()+":"+ma.getValue());
}
}
}
}
}
}
注意:相关的Java包自己实现一下吧!
那这次分享就到这里啦!我们下次再见!
原文地址:http://www.cnblogs.com/liuzijin/p/16815269.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性