展开全部
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没啥用,可以替换掉)。