日期:2018.10.11

星期四

博客期:016

题目:输出单个文件中的前 N 个最常出现的英语单词,并输出到文本文件中

  在程序运行之前,我试着先写了字符的字母的总结,加载代码如下:

  

 //如下是第一个程序的 CharBasic文件
package src; public final class CharBasic {
//检测字母是否为字母
public static boolean isAtoZ(char c){
return c<='z'&&c>='A';
}
//检测字母是否为大写
public static boolean isBig(char c){
return c>='A'&&c<='Z';
}
//检测字母是否为小写
public static boolean isSmall(char c){
return c>='a'&&c<='z';
}
//转换字符的大小写
public static char ChangeBigSmall(char c){
if(CharBasic.isBig(c))
return (char)(c+'a'-'A');
else if(CharBasic.isSmall(c))
return (char)(c+'A'-'a');
else
return '\0';
}
//int与char的"类型"转换
public static char Changeintchar(int x){
return (char)(''+x);
}
public static int Changeintchar(char c){
return (char)(c-'');
}
//主方法
public static void main(String[] args) { }
}
 //如下是第一个程序的 CharManager.java 文件
package src; public class CharManager {
//字符
private char cha;
//次数
private int num;
//cha的set、get方法
public void setcha(char chas){
cha = chas;
}
public char getcha(){
return cha;
}
//num的set、get方法
public void setnum(int nums){dda
num = nums;
}
public int getnum(){
return num;
}
//num的++方法
public void add(){
num++;
}
public void add(int n){
num = num + n;
}
//打印方法
public void Print(){
System.out.println(cha+"\t"+num);
}
//构造方法
public CharManager(){
num = ;
cha = ' ';
}
public CharManager(char t){
num = ;
cha = t;
}
public static void main(String[] args) {
CharManager t = new CharManager('f');
t.add();
t.setcha('A');
}
}
 //如下是第一个程序的 CharDate.java 文件
package src; import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner; public class CharDate {
//============================================<数据域>=============================================//
//字符数据库
private CharManager []date = null;
//确定长度
private int length;
//最大长度
private int MaxSize;
//============================================<方法域>=============================================//
//基础设置方法
public void SetLength(int l){
length = l;
}
public int GetLength(){
return length;
}
public void SetManger(int seat,char value,int times){
date[seat].setcha(value);
date[seat].setnum(times);
}
public void SetManger(int seat,CharManager a){
date[seat].setcha(a.getcha());
date[seat].setnum(a.getnum());
}
public CharManager GetManger(int seat){
return date[seat];
}
//判断数据库内部是否已满
public boolean isfull(){
return length==MaxSize;
}
//判断数据库内部是否为空
public boolean isempty(){
return length==;
}
//判断数据库内部是否含有c字符
public boolean havethechar(char c){
for(int i=;i<length;++i)
if(c==date[i].getcha())
return true;
return false;
}
//返回数据库内部字符c的位置
public int SearchSeat(char c){
for(int i=;i<length;++i)
if(c==date[i].getcha())
return i;
return -;
}
//对新字母进行处理
public void DealWithAtoZ(char c,boolean identifybigorsmall){
if(CharBasic.isAtoZ(c))
{
if(!identifybigorsmall)
{
if(havethechar(c))
date[SearchSeat(c)].add();
else if(havethechar(CharBasic.ChangeBigSmall(c)))
date[SearchSeat(CharBasic.ChangeBigSmall(c))].add();
else
{
if(length<MaxSize)
{
date[length].setcha(CharBasic.isSmall(c)?c:CharBasic.ChangeBigSmall(c));
date[length].setnum();
length++;
}
else
{
System.out.println("OverFlow!");
return;
}
}
}
else
{
if(havethechar(c))
date[SearchSeat(c)].add();
else
{
if(length<MaxSize)
{
date[length].setcha(c);
date[length].setnum();
length++;
}
else
{
System.out.println("OverFlow!");
return;
}
}
}
}
else
{
System.out.println("Not A to Z!");
return;
}
}
public void DealWithHavedAtoZ(char c,boolean identifybigorsmall){
if(CharBasic.isAtoZ(c))
{
if(!identifybigorsmall)
{
if(havethechar(c))
date[SearchSeat(c)].add();
else if(havethechar(CharBasic.ChangeBigSmall(c)))
date[SearchSeat(CharBasic.ChangeBigSmall(c))].add();
}
else
{
date[SearchSeat(c)].add();
}
}
else
{
System.out.println("Not A to Z!");
return;
}
}
//计算总数
public int Sum(){
int sum = ;
for(int i=;i<length;i++)
sum = sum + date[i].getnum();
return sum;
}
//计算概率
public double pointValue(int seat){
return (double)date[seat].getnum()/(double)Sum();
}
//打印次数
public void Printnum(int seat){
System.out.println(date[seat].getcha()+" : "+date[seat].getnum());
}
public void Printnum(){
for(int i=;i<length;i++)
System.out.println(date[i].getcha()+" : "+date[i].getnum());
}
//打印概率
public void PrintpointValue(int seat){
System.out.println(date[seat].getcha()+" : "+pointValue(seat)*+"%");
}
public void PrintpointValue(){
for(int i=;i<length;i++)
System.out.println(date[i].getcha()+" : "+pointValue(i)*+"%");
}
//从文件导入
public void BuildFromFile(String fileName){
try {
char []temp;
Scanner sc = new Scanner(new FileReader(fileName));
String string = sc.next();
temp = string.toCharArray();
for(int i=;i<temp.length;i++)
DealWithHavedAtoZ(temp[i],true);
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
//构造方法
public CharDate(){
MaxSize = ;
length = ;
date = new CharManager [];
}
public CharDate(int max){
MaxSize = max;
length = ;
date = new CharManager [max];
for(int i=;i<max;i++)
date[i] = new CharManager();
}
public CharDate(boolean identifybigorsmall){
if(identifybigorsmall)
{
MaxSize = ;
length = ;
date = new CharManager [];
for(int i=;i<;i++){
date[i] = new CharManager((char)((int)'A'+i));
}
}
else
{
MaxSize = ;
length = ;
date = new CharManager [];
for(int i=;i<;i++){
date[i] = new CharManager((char)((int)'a'+i));
}
}
}
//主方法
public static void main(String[] args) {
CharDate cd = new CharDate(false);
cd.BuildFromFile("files/save.txt");
cd.Printnum();
}
}

  大致上就是如此,其中问题还是遇到了好多的!比如说一开始我没想大小写转化的情况,那个添加载入一个字符的方法,一开始只有判断一个字符是否存在,再然后就可以执行操作了,但实际上加入大小写不区分后,就需要多加一个参数 ifidentifybigorsmall(是否区分大小写),以及多了一重判断!再加上这个参数的判断,以及多加上操作——对两个字符的分别操作!

  再说说本来要做的程序吧!这个就比字符麻烦多了!......呃,其实...吧!也没麻烦多少啊!多加了几个方法,多了几个判断!差不多就写出来了!先说,说完我在展示我的代码!谈到这个String和char[]进行转换也遇到了一些小问题!首先就是那个方法String.toCharArray();这是将字符串大类转成字符数组的方法!利用String的辅助类StringBuffer类来完成一些操作,比如利用delete(0,1);来删除第一位置的字符,用insert(0,char x);来在字符的第一位置存入新的字符,这样就可以把首字母大写的字符串改过来,改成全小写的字符串!再者就是删除字符串的特殊字符——'.'、','、'\“'、'-'等等英文语句内含有的标点符号!再者就是对数据库里的数据处理,找到出现频率排前N名的字符串,至于导出到文件里边就是小case啦!下面写我的代码:

  

 //如下是第二个程序的 StringBasic.java 文件
package src; public class StringBasic {
//输出
public static void pr(String x){
System.out.print(x);
}
//判断字符串是否为大写字母开头
public static boolean isBigFirst(String str){
char []br = str.toCharArray();
if(br[]>='A'&&br[]<='Z')
return true;
else
return false;
}
//判断字符串是否为大写字母开头
public static boolean isSmallFirst(String str){
char []br = str.toCharArray();
if(br[]>='a'&&br[]<='z')
return true;
else
return false;
}
//将字符串str的开头字符转为小写
public static String ChangeToSmall(String str){
StringBuffer sb = new StringBuffer(str);
char s = sb.charAt();
if(!StringBasic.isBigFirst(str))
return "\0";
sb.delete(,);
s = (char)(s-'S'+'s');
sb.insert(,s);
return sb.toString();
}
//字符串全转小写
public static String ToSmall(String x){
return x.toLowerCase();
}
//字符串全转大写
public static String ToBig(String x){
return x.toUpperCase();
}
//字符串删除标点符号
public static String DeleteString(String x){
x = x.replace(".","");
x = x.replace(",","");
x = x.replace("!","");
x = x.replace("?","");
x = x.replace("\"","");
x = x.replace("-","");
return x;
}
//主方法
public static void main(String[] args) {
System.out.println("WaterMa--------te\".dadad!?ffiuo\"");
System.out.println(DeleteString("WaterMate.dadad!?ffiuo\""));
}
}
 //如下是第二个程序的 StringManager.java 文件
package src; public class StringManager {
//======================<数据域>=======================//
//单词
private String string;
//出现次数
private int num;
//======================<方法域>=======================//
//string的Set、Get方法
public void setString(String str){
string = str;
}
public String getString(){
return string;
}
//num的Set、Get方法
public void setNum(int nums){
num = nums;
}
public int getNum(){
return num;
}
//次数++
public void add(){
num++;
}
public void add(int n){
num = num + n;
}
//打印方法
public void Print(){
System.out.println(string+" : "+num);
}
//构造方法
public StringManager(){
num = 0;
string = null;
}
public StringManager(String str){
num = 0;
string = str;
}
public StringManager(String str,int times){
num = times;
string = str;
}
//主方法
public static void main(String[] args) { }
}
 //如下是第二个程序的
package src; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner; public class StringDate {
//======================<数据域>=======================//
//数据库
private StringManager []date = null;
//长度
private int length;
//最大容量
private int MaxSize;
//======================<方法域>=======================//
//基础方法
public void SetLength(int l){
length = l;
}
public int GetLength(){
return length;
}
public void SetDate(int seat,String str,int times){
date[seat].setNum(times);
date[seat].setString(str);
}
public void SetDate(int seat,StringManager a){
date[seat].setNum(a.getNum());
date[seat].setString(a.getString());
}
public StringManager GetDate(int seat){
return date[seat];
}
//判断数据库内部是否已满
public boolean isfull(){
return length==MaxSize;
}
//判断数据库内部是否为空
public boolean isempty(){
return length==0;
}
//计算总数
public int Sum(){
int sum = 0;
for(int i=0;i<length;i++)
sum = sum + date[i].getNum();
return sum;
}
//计算概率
public double pointValue(int seat){
return (double)date[seat].getNum()/(double)Sum();
}
//打印次数
public void Printnum(int seat){
System.out.println(date[seat].getString()+" : "+date[seat].getNum());
}
public void Printnum(){
for(int i=0;i<length;i++)
Printnum(i);
}
//打印概率
public void PrintpointValue(int seat){
System.out.println(date[seat].getString()+" : "+pointValue(seat)*100+"%");
}
public void PrintpointValue(){
for(int i=0;i<length;i++)
PrintpointValue(i);
}
//添加一个字符串
public void AddString(String str){
str = StringBasic.ToSmall(str);
str = StringBasic.DeleteString(str);
if(str.compareTo("")==0)
return;
else
{
if(HaveTheString(str))
{
date[SearchString(str)].add();
}
else
{
if(length==MaxSize)
{
System.out.println("OverFlow!");
return;
}
else
{
date[length].setNum(1);
date[length].setString(str);
length++;
}
}
}
}
//从数据库里寻找是否存在该字符串
public boolean HaveTheString(String str){
for(int i=0;i<length;i++)
if(date[i].getString().compareTo(str)==0)
return true;
return false;
}
//从数据库里寻找该字符串的位置
public int SearchString(String str){
for(int i=0;i<length;i++)
if(date[i].getString().compareTo(str)==0)
return i;
return -1;
}
//从文件里导入
public void BuildFromFile(String fileName){
try {
Scanner sc = new Scanner (new FileReader(fileName));
String str = sc.next();
for(;str.compareTo("")!=0&&sc.hasNext();str = sc.next())
{
AddString(str);
}
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
//构造方法
public StringDate(){
MaxSize = 0;
length = 0;
date = new StringManager[0];
}
public StringDate(int max){
MaxSize = max;
length = 0;
date = new StringManager[max];
for(int i=0;i<max;i++)
date[i] = new StringManager();
}
//打印前 N 名的次数
public void PrintStringInNo(int N){
String [] str = new String [N];
int [] Number = new int [N];
for(int i=0;i<N;i++)
Number[i] = 0;
for(int i=0;i<length;i++)
{
for(int k=0;k<N;k++)
if(date[i].getNum()>Number[k])
{
for(int j=N-1;j>k;j--)
{
Number[j] = Number[j-1];
str[j] = str [j-1];
}
str[k] = date[i].getString();
Number[k] = date[i].getNum();
break;
}
}
for(int i=0;i<N;i++)
System.out.println(str[i]+" : "+Number[i]);
}
//打印前 N 名的次数
public void PrintStringInNo(int N,String fileName){
String [] str = new String [N];
int [] Number = new int [N];
for(int i=0;i<N;i++)
Number[i] = 0;
for(int i=0;i<length;i++)
{
for(int k=0;k<N;k++)
if(date[i].getNum()>Number[k])
{
for(int j=N-1;j>k;j--)
{
Number[j] = Number[j-1];
str[j] = str [j-1];
}
str[k] = date[i].getString();
Number[k] = date[i].getNum();
break;
}
}
File f = new File(fileName);
if(!f.exists())
{
try {
f.createNewFile();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
try {
PrintWriter pw = new PrintWriter(new FileWriter(fileName));
for(int i=0;i<N;i++)
{
pw.println(str[i]+" : "+Number[i]);
}
pw.close();
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
//主方法
public static void main(String[] args) {
StringDate sd = new StringDate(10000);
sd.BuildFromFile("files/Harry Potter.txt");
sd.PrintStringInNo(5,"files/answer.txt");
}
}
StringDate.java 文件

  

  

Java的实验程序之输出单个文件中的前 N 个最常出现的英语单词的更多相关文章

  1. 输出单个文件中的前 N 个最常出现的英语单词,并将结果输入到文本文件中。程序设计思路。

    将文件内容读取后存入StringBuffer中. 利用函数将段落分割成字符串,按(“,”,“.”,“!”,“空格”,“回车”)分割,然后存入数组中. 遍历数组,并统计每个单词及其出现的次数. 要求出文 ...

  2. windows cmd.exe 将程序 stdout 输出到文件中

    问题背景:通过 cmd.exe 调用程序,会有一些输出信息,在 cmd 中不方便查阅,所以需要导入文件中. 例如 方法: 可以在其路径下看到

  3. IDEA 之 ERROR:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

    问题描述:在使用IDEA对JSTL进行测试时出现error:无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core] ...

  4. ios 将Log日志重定向输出到文件中保存

    对于真机,日志没法保存,不好分析问题.所以有必要将日志保存到应用的Docunment目录下,并设置成共享文件,这样才能取出分析. 首先是日志输出,分为c的printf和标准的NSLog输出,print ...

  5. spark SQL读取ORC文件从Driver启动到开始执行Task(或stage)间隔时间太长(计算Partition时间太长)且产出orc单个文件中stripe个数太多问题解决方案

    1.背景: 控制上游文件个数每天7000个,每个文件大小小于256M,50亿条+,orc格式.查看每个文件的stripe个数,500个左右,查询命令:hdfs fsck viewfs://hadoop ...

  6. 将windows控制台内容输出到文件中

    将windows控制台内容输出到文件中 dir>c:/file.txt 2>&1   对应的java  class   >c:/file.txt 2>&1   ...

  7. 【转】【整理】将Linux脚本中的正常输出,警告,错误等信息输出到文件中

     本文来自:http://blog.csdn.net/woshinia/article/details/18040063   很早以前  编译的时候 就在用 2>&1,但是一直没有生成一 ...

  8. 将Linux下编译的warning警告信息输出到文件中[整理笔记]

    Linux中,脚本语言环境中,即你用make xxx即其他一些普通linux命令,比如ls,find等,不同的数字,代表不同的含义: 数字 含义 标准叫法0 标准输入  stdin = standar ...

  9. shell编程学习笔记(七):Shell中将指定内容输出到文件中

    我们这里把echo要打印的内容输出到文件中 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vim script06.sh 开始编写script ...

随机推荐

  1. jQuery的节点添加、删除、替换等操作

    //几种添加节点的方法 //$("p").append("<b>你好吗?</b>");//向p元素中追加<b> //$(&q ...

  2. (2)Java数据结构--二叉树 -和排序算法实现

    === 注释:此人博客对很多个数据结构类都有讲解-并加以实例 Java API —— ArrayList类 & Vector类 & LinkList类Java API —— BigDe ...

  3. Android程序破解思路

    Android程序的一般分析与破解流程 1.如何寻找突破口是分析一个程序的关键.错误提示信息左右一般是程序验证逻辑的核心代码. 2.错误提示是android程序的字符串资源,字符串有可能硬编码到源码中 ...

  4. JAVA并行异步编程,线程池+FutureTask

    java 在JDK1.5中引入一个新的并发包java.util.concurrent 该包专门为java处理并发而书写. 在java中熟悉的使用多线程的方式为两种?继续Thread类,实现Runnal ...

  5. SpringMVC中请求路径参数使用正则表达式

    @GetMapping("/user/{id:\\d+}") //使用正则指定Id为数字 public User getInfo(@PathVariable String id){ ...

  6. 解决ubuntu的gedit编辑器中文乱码的问题

    hello,本人 sky 又和大家见面了很多人在使用ubuntu系统时发现打开windows系统下面写的文档的话会发现乱码,是因为编码格式的问题windows系统下面是用GB2312等编码格式进行中文 ...

  7. python3+selenium入门15-执行JavaScript

    有时有些功能需要通过js来执行,比如拖动浏览器的滚动条.通过execute_script()方法可以执行js的代码 window.scrollTo()可以传两个参数,第一个参数是下方滚动条的位置,第二 ...

  8. mongodb 创建更新语法

    创建文档 向MongoDB插入数据,使用insert, 如:db.refactor.insert({"refactor's blog":"http://www.cnblo ...

  9. aix安装nmon

    aix5310以上都系统自带了nmon,其他低版本需要手动安装 软件包下载地址https://www.ibm.com/developerworks/community/wikis/home?lang= ...

  10. 题解-UOJ284 快乐游戏鸡

    Problem uoj 题意大意: 一棵树,点权\(w_i\),每次玩家可以在树上行走,一条边需要\(1\)的时间,只能往儿子走.每次游戏需要从\(s\)到\(t\). 玩家有一个总死亡次数,初始为\ ...