日期:2019.5.9

博客期:073

星期四

  今天软件工程课上,又做了测试,老师说我们的速度太慢了,实际上我也觉得自己很慢。老师说了这是我们的上一届的大二上半学期学习中的速度,所以呢?意思就是说我们和上一届的学长学姐们相比差的是天与地的距离啊!emmmm......唉~我也承认了!以下是我提交的源码,请各位欣赏,有疑问的话,评论区里见!

源码:

 package basic;

 public class Chara {
public char str;
public int times;
}

char.Chara.java

 package basic;

 import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; public class Justice {
public List <Chara> list = new ArrayList<Chara>();
public int length = 0;
public boolean isAccess(char c){
return ((c>='a'&&c<='z')||(c>='A'&&c<='Z'));
}
public double p(char c){
int seat = (changeToSmall(c)-'a');
int time = list.get(seat).times;
return (double)((double)time/(double)length);
}
public char changeToSmall(char c){
if(c>='a'&&c<='z')
return c;
else
return (char)(c-'A'+'a');
}
public void dealFile(String filename) throws Exception{
File f = new File(filename);
if(!f.exists())
{
f.createNewFile();
}
Scanner sc = new Scanner(f);
while(sc.hasNext())
{
String s = sc.next();
for(int t=0;t<s.length();++t)
{
char c = s.charAt(t);
if(this.isAccess(c))
{
int seat = (changeToSmall(c)-'a');
Chara ch = list.get(seat);
ch.times++;
list.set(seat, ch);
++length;
}
}
} sc.close();
}
public void changeChannel(){
int size = list.size();
for(int i=0;i<size;++i)
{
for(int j=0;j<size-1;++j)
{
if(list.get(j).times<list.get(j+1).times)
{
Chara temp = list.get(j);
list.set(j,list.get(j+1));
list.set(j+1, temp);
}
}
}
}
public void display(){
int leng = list.size();
for(int i=0;i<leng;++i)
{
char c = (char)(i+'a');
System.out.println((char)(i+'a')+"出现了"+(list.get(i).times)+"次,它的频率是"+p(c)+"\t");
}
}
public Justice(){
for(char i='a';i<='z';++i)
{
Chara c = new Chara();
c.str = i;
c.times = 0;
list.add(c);
}
}
}

Justice.java

 package basic;

 public class Main {
public static void main(String[] args) throws Exception {
Justice justice = new Justice();
justice.dealFile("txt/piao.txt");
justice.changeChannel();
justice.display();
}
}

Main.java

 package more;

 public class Chara {
public String str = "";
public int times = 0;
public Chara(){ }
public Chara(String str,int times){
this.str = str;
this.times = times;
}
}

word.Chara.java

 package more;

 import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; public class EditTable{ public List<Chara> list = new ArrayList<Chara>();
public List<String> listString = new ArrayList<String>();
public int length = 0;
public boolean isAddmitted = false;
//单词处理
public String changeWord(String str){
String newStr = str.replace("“","");
newStr = newStr.replace(",","");
newStr = newStr.replace("”","");
newStr = newStr.replace(".","");
newStr = newStr.replace("?","");
newStr = newStr.replace("!","");
newStr = newStr.replace(":","");
return newStr.toLowerCase();
}
public boolean isInUnUseTable(String str){
int leng = listString.size();
for(int i=0;i<leng;++i)
{
if(str.toLowerCase().compareTo(listString.get(i))==0)
return true;
}
return false;
}
//判断是否可以通过
public boolean isAccess(String str){
int leng = str.length();
str = this.changeWord(str); if(isAddmitted)
{
if(isInUnUseTable(str))
return false;
} for(int i=0;i<leng;++i)
{
char c = str.charAt(i);
if(!((c>='a'&&c<='z')||(c>='A'&&c<='Z')))
return false;
}
return true;
}
public boolean isAddmitted() {
return isAddmitted;
}
public void setAddmitted(boolean isAddmitted) {
this.isAddmitted = isAddmitted;
}
//判断位置
public int seatAt(String c){
int leng = list.size();
for(int i=0;i<leng;++i)
{
String trp = list.get(i).str;
if(trp.compareTo(c)==0)
return i;
}
return -1;
}
//判断并添加
public void AddString(String str){
if(isAccess(changeWord(str)))
{
int seat = seatAt(changeWord(str));
if(seat==-1)
{
Chara chara = new Chara(changeWord(str),1);
list.add(chara);
}
else
{
Chara chara = list.get(seat);
chara.times++;
list.set(seat, chara);
}
++length;
}
}
//排序
public void changeChannel(){
int size = list.size();
for(int i=0;i<size;++i)
{
for(int j=0;j<size-1;++j)
{
if(list.get(j).times<list.get(j+1).times)
{
Chara temp = list.get(j);
list.set(j,list.get(j+1));
list.set(j+1, temp);
}
}
}
}
//概率
public double p(String str){
int seat = seatAt(changeWord(str));
if(seat==-1)
return 0;
int time = list.get(seat).times;
return ((double)time/(double)length);
}
//展示
public void display(int seat){
Chara cha = list.get(seat);
System.out.println("单词:"+cha.str+(cha.str.length()<=2?"\t\t":"\t")+"出现次数:"+cha.times+"\t"+"概率为:"+((double) Math.round(p(cha.str) * 10000) / 100)+"%\t");
}
public void Display(int N){
for(int i=0;i<N&&i<list.size();++i)
display(i);
}
public EditTable() throws FileNotFoundException{ Scanner sc = new Scanner(new File("txt/stopword.txt"));
while(sc.hasNext())
{
String str = sc.next();
listString.add(str);
}
}
public EditTable(boolean isAd) throws FileNotFoundException{
this.isAddmitted = isAd;
Scanner sc = new Scanner(new File("txt/stopword.txt"));
while(sc.hasNext())
{
String str = sc.next();
listString.add(str);
}
}
//处理文件
public void DealFile(String fileName) throws Exception{
File f = new File(fileName);
Scanner sc = new Scanner(f);
while(sc.hasNext())
{
String str = sc.next();
AddString(str);
}
sc.close();
} }

EditTable.java

 package more;

 import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; import more.Chara; public class Table {
public List<Chara> list = new ArrayList<Chara>();
public List<String> listString = new ArrayList<String>();
public int length = 0;
public boolean isAddmitted = false;
//单词处理
public String changeWord(String str){
String newStr = str.replace("“","");
newStr = newStr.replace(",","");
newStr = newStr.replace("”","");
newStr = newStr.replace(".","");
newStr = newStr.replace("?","");
newStr = newStr.replace("!","");
newStr = newStr.replace(":","");
return newStr.toLowerCase();
}
public static boolean isContainSpecifical(String str){
if(str.contains("“"))
return false;
if(str.contains("”"))
return false;
if(str.contains(","))
return false;
if(str.contains("."))
return false;
if(str.contains("?"))
return false;
if(str.contains("!"))
return false;
if(str.contains(":"))
return false;
return true;
}
public boolean isInUnUseTable(String str){
int leng = listString.size();
for(int i=0;i<leng;++i)
{
if(str.toLowerCase().compareTo(listString.get(i))==0)
return true;
}
return false;
}
//判断是否可以通过
public boolean isAccess(String str){
int leng = str.length();
str = this.changeWord(str); if(isAddmitted)
{
if(isInUnUseTable(str))
return false;
} for(int i=0;i<leng;++i)
{
char c = str.charAt(i);
if(!((c>='a'&&c<='z')||(c>='A'&&c<='Z')))
return false;
}
return true;
}
public boolean isAddmitted() {
return isAddmitted;
}
public void setAddmitted(boolean isAddmitted) {
this.isAddmitted = isAddmitted;
}
//判断位置
public int seatAt(String c){
int leng = list.size();
for(int i=0;i<leng;++i)
{
String trp = list.get(i).str;
if(trp.compareTo(c)==0)
return i;
}
return -1;
}
//判断并添加
public void AddString(String str){
if(isAccess(changeWord(str)))
{
int seat = seatAt(changeWord(str));
if(seat==-1)
{
Chara chara = new Chara(changeWord(str),1);
list.add(chara);
}
else
{
Chara chara = list.get(seat);
chara.times++;
list.set(seat, chara);
}
++length;
}
}
//排序
public void changeChannel(){
int size = list.size();
for(int i=0;i<size;++i)
{
for(int j=0;j<size-1;++j)
{
if(list.get(j).times<list.get(j+1).times)
{
Chara temp = list.get(j);
list.set(j,list.get(j+1));
list.set(j+1, temp);
}
}
}
}
//概率
public double p(String str){
int seat = seatAt(changeWord(str));
if(seat==-1)
return 0;
int time = list.get(seat).times;
return ((double)time/(double)length);
}
//展示
public void display(int seat){
Chara cha = list.get(seat);
System.out.println("单词:"+cha.str+(cha.str.length()<=2?"\t\t":"\t")+"出现次数:"+cha.times+"\t"+"概率为:"+((double) Math.round(p(cha.str) * 10000) / 100)+"%\t");
}
public void Display(int N){
for(int i=0;i<N&&i<list.size();++i)
display(i);
}
public Table() throws FileNotFoundException{ Scanner sc = new Scanner(new File("txt/stopword.txt"));
while(sc.hasNext())
{
String str = sc.next();
listString.add(str);
}
}
public Table(boolean isAd) throws FileNotFoundException{
this.isAddmitted = isAd;
Scanner sc = new Scanner(new File("txt/stopword.txt"));
while(sc.hasNext())
{
String str = sc.next();
listString.add(str);
}
}
//读取
public void AddMenu(List <String> sqlList){
int length = sqlList.size();
String ss = "";
if(length!=0)
ss = sqlList.get(length-1);
for(int i=length-2;i>=0;--i)
{
ss = sqlList.get(i) + " " + ss;
AddString(ss);
}
}
//处理文件
public void DealFile(String fileName) throws Exception{
File f = new File(fileName);
Scanner sc = new Scanner(f);
boolean isT = true;
while(sc.hasNext())
{
while(isT&&sc.hasNext())
{
List <String> strSql = new ArrayList<String>();
String str = sc.next();
if(isInUnUseTable(str))
break;
strSql.add(str);
AddMenu(strSql);
if(Table.isContainSpecifical(str))
break;
}
}
sc.close();
}
}

Table.java

 package running;

 import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Scanner; import more.EditTable;
import more.Table; import basic.Justice; public class TestMain {
//第0步
public static void process0(String file) throws Exception{
Justice justice = new Justice();
justice.dealFile(file);
justice.changeChannel();
justice.display();
}
//第1步
public static void process1(String file) throws Exception{
EditTable table = new EditTable();
table.DealFile(file);
table.changeChannel();
table.Display(99999999);
}
//第2步
public static void process2(String file,int num) throws Exception{
EditTable table = new EditTable();
table.DealFile(file);
table.changeChannel();
table.Display(num);
}
//第3步
public static void process3(String file,int num) throws Exception{
EditTable table = new EditTable(true);
table.DealFile(file);
table.changeChannel();
table.Display(num);
}
//第4步
public static void process4(String file,int num) throws Exception{
Table table = new Table();
table.DealFile(file);
table.changeChannel();
table.Display(999999);
}
//停用词
public static void stopWord(String file) throws Exception{
File f = new File("txt/stopword.txt");
PrintWriter pw = new PrintWriter(new FileWriter(f,true));
pw.println();
pw.println(file);
pw.close();
}
//主
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
boolean isAccess = true;
while(isAccess)
{
System.out.println("===============================================");
System.out.println(" p0 + 文件路径 -----------> 分析字母");
System.out.println(" p1 + 文件路径 -----------> 分析单词");
System.out.println(" p2 + 文件路径 + 前几项 -----------> 分析频率最高的单词");
System.out.println(" p3 + 文件路径 + 前几项 -----------> 分析频率最高的单词(过滤)");
System.out.println(" sw + 单词 -----------> 添加停用词");
System.out.println(" p4 + 文件路径 + 前几项 -----------> 分析短语");
System.out.println(" q -----------> 退出");
System.out.println();
String order = sc.next();
String file = sc.next();
if(order.compareTo("p0")==0)
{
TestMain.process0(file);
}
else if(order.compareTo("p1")==0)
{
TestMain.process1(file);
}
else if(order.compareTo("p2")==0)
{
int num = sc.nextInt();
TestMain.process2(file,num);
}
else if(order.compareTo("p3")==0)
{
int num = sc.nextInt();
TestMain.process3(file,num);
}
else if(order.compareTo("sw")==0)
{
TestMain.stopWord(file);
}
else if(order.compareTo("p4")==0)
{
int num = sc.nextInt();
TestMain.process4(file,num);
}
else if(order.compareTo("q")==0)
{
System.out.println("欢迎下次使用!");
break;
}
System.out.println("===============================================");
}
sc.close();
}
}

TestMain.java

 package more;

 import java.io.File;

 public class Test {
public static void TestForPath(String path) throws Exception{
File file = new File(path);
if(file.isDirectory())
{
File []fl = file.listFiles();
int leng = fl.length;
for(int i=0;i<leng;++i)
{
String fileName = path+"/"+fl[i].getName();
EditTable table = new EditTable();
System.out.println("====================================================");
System.out.println("文件名称:"+fl[i].getName());
table.DealFile(fileName);
table.changeChannel();
table.Display(40);
}
}
}
public static void main(String[] args) throws Exception {
TestForPath("txt");
}
}

Test.java

 package running;

 import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Scanner; import more.EditTable;
import more.Table; import basic.Justice; public class TestMain {
//第0步
public static void process0(String file) throws Exception{
Justice justice = new Justice();
justice.dealFile(file);
justice.changeChannel();
justice.display();
}
//第1步
public static void process1(String file) throws Exception{
EditTable table = new EditTable();
table.DealFile(file);
table.changeChannel();
table.Display(99999999);
}
//第2步
public static void process2(String file,int num) throws Exception{
EditTable table = new EditTable();
table.DealFile(file);
table.changeChannel();
table.Display(num);
}
//第3步
public static void process3(String file,int num) throws Exception{
EditTable table = new EditTable(true);
table.DealFile(file);
table.changeChannel();
table.Display(num);
}
//第4步
public static void process4(String file,int num) throws Exception{
Table table = new Table();
table.DealFile(file);
table.changeChannel();
table.Display(999999);
}
//停用词
public static void stopWord(String file) throws Exception{
File f = new File("txt/stopword.txt");
PrintWriter pw = new PrintWriter(new FileWriter(f,true));
pw.println();
pw.println(file);
pw.close();
}
//主
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
boolean isAccess = true;
while(isAccess)
{
System.out.println("===============================================");
System.out.println(" p0 + 文件路径 -----------> 分析字母");
System.out.println(" p1 + 文件路径 -----------> 分析单词");
System.out.println(" p2 + 文件路径 + 前几项 -----------> 分析频率最高的单词");
System.out.println(" p3 + 文件路径 + 前几项 -----------> 分析频率最高的单词(过滤)");
System.out.println(" sw + 单词 -----------> 添加停用词");
System.out.println(" p4 + 文件路径 + 前几项 -----------> 分析短语");
System.out.println(" q -----------> 退出");
System.out.println();
String order = sc.next();
String file = sc.next();
if(order.compareTo("p0")==0)
{
TestMain.process0(file);
}
else if(order.compareTo("p1")==0)
{
TestMain.process1(file);
}
else if(order.compareTo("p2")==0)
{
int num = sc.nextInt();
TestMain.process2(file,num);
}
else if(order.compareTo("p3")==0)
{
int num = sc.nextInt();
TestMain.process3(file,num);
}
else if(order.compareTo("sw")==0)
{
TestMain.stopWord(file);
}
else if(order.compareTo("p4")==0)
{
int num = sc.nextInt();
TestMain.process4(file,num);
}
else if(order.compareTo("q")==0)
{
System.out.println("欢迎下次使用!");
break;
}
System.out.println("===============================================");
}
sc.close();
}
}

TestMain.java

附上截图:

对于文章的字母、单词、短语,(无用词表)的检索Java代码实现的更多相关文章

  1. 统计英文文章中各单词的频率,打印频率最高的十个单词(C语言实现)

     一.程序思路及相关代码 首先打开文件,代码如下 FILE *fp; char fname[10]; printf("请输入要分析的文件名:\n"); scanf("%s ...

  2. 【原创】怎样才能写出优雅的 Java 代码?这篇文章告诉你答案!

    本文已经收录自 JavaGuide (59k+ Star):[Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识. 本文比较简短,基本就是推荐一些对于写好代码非常有用的文章或者 ...

  3. C++语言,统计一篇英文文章中的单词数(用正则表达式实现)

    下面的例子展示了如何在C++11中,利用regex_search()统计一篇英文文章中的单词数: #include <iostream> #include <regex> #i ...

  4. NLP系列文章:子词嵌入(fastText)的理解!(附代码)

    1. 什么是fastText 英语单词通常有其内部结构和形成⽅式.例如,我们可以从"dog""dogs"和"dogcatcher"的字⾯上推 ...

  5. php文章内容分页并生成相应的htm静态页面代码

    代码如下: <?php $url='test.php?1=1'; $contents="fjka;fjsa;#page#批量生成分成文件并且加上分页代码"; $ptext = ...

  6. java代码把字母转换大小写、、、、

    总结:从键盘输入多少次,就用for循环控制.这些需要输入的数据都放在循环内部,否则不会执行多次. package com.aaa; import java.util.Scanner; //大小写字母的 ...

  7. 务必收藏备用:.net core中通过Json或直接获取图形验证码(数字验证码、字母验证码、混合验证码),有源代码全实战demo(开源代码.net core3.0)

    很多人写的博客大家看了会一知半解,不知道怎么用,应该引用什么类库或者代码不全,这样很多小白很是头疼,尤其是尝新技术更是如此.我们这边不止告诉你步骤,而且还提供开源demo.随着时间的推移,我们的dem ...

  8. 通过递归方法对一个单词所有的组合进行列举(java)

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public ...

  9. [转载非常好的文章]JLink+GDBServer调试S3C6410裸板的初始化代码 For OK6410开发板

    要调试裸板,有两种初始化方法,一个是用烧好的uboot初始化,再有就是直接用JLink+GDBServer初始化.代码参考了网上的资料,根据手头的OK6410开发板做了修改.整体代码如下: # Con ...

随机推荐

  1. CocosCreator内存与性能优化

    一.内存优化 因为 iOS小游戏和微信共用同一个进程,而微信在连续两次收到系统内存警告的时候会关闭小游戏并释放小游戏占用的内存.如果你的小游戏有外网用户反馈“闪退”,或者你自己测试的时候频繁出现“该小 ...

  2. 【转】教你怎么调用Gitlab API

    官方文档: https://docs.gitlab.com/ce/api/ https://docs.gitlab.com/ee/api/branches.html#list-repository-b ...

  3. nyoj 82

    题目:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=82 2018-06-23 23:44:05 p.s.自己省错题了: 描述 一个叫ACM的 ...

  4. 「JSOI2014」序列维护

    「JSOI2014」序列维护 传送门 其实这题就是luogu的模板线段树2,之所以要发题解就是因为学到了一种比较NB的 \(\text{update}\) 的方式.(参见这题) 我们可以把修改操作统一 ...

  5. 前端学习 之 CSS(一)

    一:什么是 CSS? ·CSS 指层叠样式表 (Cascading Style Sheets) ·样式定义如何显示 HTML 元素 ·样式通常存储在样式表中 ·把样式添加到 HTML 4.0 中,是为 ...

  6. 【LOJ3087】「GXOI / GZOI2019」旅行者

    题意 给定一个 \(n\) 个点 \(m\) 条边的的有向图,给出 \(k\) 个关键点,求关键点两两最短路的最小值. \(n\le 10^5, m\le 5\cdot 10^5\). 题解 二进制分 ...

  7. 「模板」可持久化 HFQ-Treap

    老师用的是静态数组的写法,开了很多数组- 其实个人更倾向于 struct 或者用 class 封装起来. 但是鉴于太难打 好吧,是我懒得打. 然后就借鉴了老师的模板,写出了属于自己的 压行 风格. 代 ...

  8. Spring SpringMVC 和 Springboot 的关系(转载)

    原文链接 spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc. spring mvc 是只是spring 处理web层请 ...

  9. centos 7中添加一个新用户并授权的步骤详解

    1.创建新用户: 创建一个用户名为:zhangbiao adduser zhangbiao 为这个用户初始化密码,linux会判断密码复杂度,不过可以强行忽略: passwd zhangbiao  更 ...

  10. 4 CSS导航栏&下拉菜单&属性选择器&属性和值选择器

    CSS导航栏 熟练使用导航栏,对于任何网站都非常重要 使用CSS你可以转换成好看的导航栏而不是枯燥的HTML菜单 垂直导航栏: <!DOCTYPE html> <html> & ...