日期: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. Docker for YApi--一键部署YApi

    获取YApi镜像$ docker pull mrjin/yapi:latest 注意:本仓库目前只支持安装,暂不支持升级,请知晓.如需升级请备份mongoDB内的数据. docker-compose ...

  2. redis哨兵模式启动redis-sentinel sentinel.conf 报错

    [root@node01 redis-3.2.8]# redis-sentinel sentinel.conf *** FATAL CONFIG FILE ERROR ***Reading the c ...

  3. java 使用poi 导入Excel 数据到数据库

    由于我个人电脑装的Excel是2016版本的,所以这地方我使用了XSSF 方式导入 . 1先手要制定一个Excel 模板 把模板放入javaWeb工程的某一个目录下如图: 2模板建好了后,先实现模板下 ...

  4. HDU 1035 Robot Motion(dfs + 模拟)

    嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1035 这道题比较简单,但自己一直被卡,原因就是在读入mp这张字符图的时候用了scanf被卡. ...

  5. 「CF1313C Skyscrapers」

    题目大意 给出一个长度为 \(N\) 的序列 \(a\) 需要构造出一个长度为 \(N\) 的序列 \(h\) 使得 \(\forall i \in \{1,2,\ldots ,N\} h_i \le ...

  6. 安装oracle11g跳不过下载软件更新[INS-30131] 执行安装程序验证所需的初始设置失败

    链接:https://www.jb51.net/article/88944.htm 问题已解决: 解决方法 第一步: 控制面板>所有控制面板项>管理工具>服务>SERVER 启 ...

  7. Flask - 运行APP

    from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return 'Hello, ...

  8. Matlab的简单数据保存读取

    1.使用load进行文件读取 例如读入文件名为'filename.txt'中的数据,那么可以使用以下代码: load('filename.txt') 注意:filename.txt中的数据应符合矩阵形 ...

  9. input、raw_input区别,运算符,运算优先级,多变赋值方式

    目录 1. Python2中的input.raw_input赋值方式和Python3中的input赋值方式的差别 2. 运算符 3. python运算符优先级 4. 格式化输出 5. 链式赋值 6. ...

  10. TouchGFX

    TouchGFX让用户界面代码只占用10KB的 SRAM空间和20KB的闪存空间的C ++软件框架.有无操作系统均可