java中修改和删除的单词_编写java程序,从包含大量单词的文本中删除出现次数最少的单词。...

该Java程序从文件中读取文本,统计每个单词出现的次数,并删除出现次数最少的单词。它使用LinkedHashMap存储单词及其频率,然后遍历找到最小频率并删除这些单词。
摘要由CSDN通过智能技术生成

展开全部

package test.xls;

import java.io.File;

import java.io.FileReader;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.LinkedHashMap;

import java.util.List;

import java.util.Map;

public class DeleteMinWords {

private StringBuffer txtBuffer;

private File file;

private char[] chars;

public DeleteMinWords(String filePath) {

chars = new char[1024];

file = new File(filePath);

txtBuffer = new StringBuffer();

readFileToBuffer(file);

}

public StringBuffer readFileToBuffer(File file) {

StringBuffer buffer = new StringBuffer();

try {

FileReader reader = new FileReader(file);

while (reader.read(chars) != -1)

;

} catch (Exception e) {

e.printStackTrace();

}

return buffer.append(chars);

}

/*

* 统计62616964757a686964616fe59b9ee7ad9431333332643262相同单词出现的次数

* 将单词加入map的键,值存储单词出现的次数

* 只需扫描一次chars就可以统计出单词和他出现的次数

*/

public Map countWords(Map map) {

StringBuffer str = new StringBuffer();

for (int i = 0; i 

if (chars[i] != 32) {

for (int j = i; j 

if (chars[j] == 32) {

String strs = str.toString();

if (map.containsKey(strs)) {

int num = map.get(strs);

num++;

map.put(strs, num);

} else {

map.put(strs, 1);

}

str.setLength(0);

i = j;

break;

}

str.append(chars[j]);

}

}

}

return map;

}

/*

* 遍历map找出其他的最小值,再次遍历找出与最小值相同的键

*/

public List getMinAppearWords(Map map) {

List list = new ArrayList();

String temp = null;

int minNum = 1;

int tempNum = 1;

for (Iterator iterator = map.keySet().iterator(); iterator

.hasNext();) {

temp = iterator.next();

tempNum = map.get(temp);

if (tempNum <= minNum) {

minNum = tempNum;

}

}

for (Iterator it = map.keySet().iterator(); it.hasNext();) {

temp = it.next();

if (map.get(temp) == minNum) {

list.add(temp);

}

}

return list;

}

/*

* 将chars数组中有出现最少次数的单词全部置为0

* 遍历chars将chars中不为0的值拷贝到temp中

* 输出将temp加入到txtBuffer中

*/

public void deleteMinWords(List wordsList) {

char[] temp = new char[chars.length];

StringBuffer str = new StringBuffer();

int position = 0;

int start = 0;

int end = 0;

for (int i = 0; i 

if (chars[i] != 32) {

for (int j = i; j 

if (chars[j] == 32) {

String strs = str.toString();

for (int m = 0; m 

if (wordsList.get(m).equals(strs)) {

end = j;

for (start = i; start <= end; start++) {

chars[start] = 0;

}

break;

}

}

str.setLength(0);

i = j;

break;

}

str.append(chars[j]);

}

}

}

for (int i = 0; i 

if (chars[i] != 0) {

temp[position] = chars[i];

position++;

}

}

txtBuffer.append(temp);

}

public void pirntBuffer() {

System.out.println(txtBuffer.toString());

}

public static void main(String[] args) {

DeleteMinWords words = new DeleteMinWords("d:\\test.txt");

Map map = new LinkedHashMap();

List deList = new ArrayList();

words.countWords(map);

deList = words.getMinAppearWords(map);

words.deleteMinWords(deList);

words.pirntBuffer();

}

}

这是要累死人啊,本来不想加注释的,还是给你加上,看不看的懂由你。(难点在删除!里面的stringbuffer没啥用,可以替换掉)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值