现在有一组用逗号(,)隔开的字符串
String str = "中国,美国,日本,朝鲜,中国,中国,美国,越南";实现一下效果:
中国 的个数 3
美国 的个数 2
朝鲜 的个数 1
....主要是现在这个字符串可能会包含上万个单词,想求最有效,最快的办法。
String str = "中国,美国,日本,朝鲜,中国,中国,美国,越南";实现一下效果:
中国 的个数 3
美国 的个数 2
朝鲜 的个数 1
....主要是现在这个字符串可能会包含上万个单词,想求最有效,最快的办法。
解决方案 »
- ArrayList 是泛型类么?
- 为什么JOptionPane.showmessagedialog会弹出两次一样的对话框来?
- 关于事件处理器的问题~
- Can recommend a better java compression library?
- 一个关于 static 变量的简单程序,请高手进来看看
- 求点拨一个Socket通信实验的“空指针错误”原因.
- 请问JTextField对象和JPassword对象中输入的内容用哪两个方法取得??????
- 高分求救!为什么不同的汉字写进数据库中变成一样的了?
- 无知者问:Java和JaveScript有什么区别?
- 关于编码的一个疑问
- 线程
- 请问,我的SQLSERVER 2000数据库中的数据库名 sa 与uep是并列的关系吗?
这是一种比较简单的做法,也可以使用一个Map保存个数,如 Map map = new HashMap<String,Integer>();然后用StringTokenizer处理后将map对应的Integer每次修改一下,如果觉得用Integer不好处理,可以自己封装一个和Integer差不多的类,但是比Integer好的就是可以自动加,而不用重新构建。
算法
从第一个开始
第1个和所有比较如果相同取出
然后递归有效率的话LZ看看这编--中文排序
http://www.blogjava.net/jeff-lau/archive/2007/12/21/169257.html
package csdn2;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class TestCS {
public static void main(String[] args) {
String a = "中国,美国,日本,朝鲜,中国,中国,美国,越南";
List list = getList(a);
for(int i = 0;i<list.size();i++){
System.out.println(list.get(i).toString());
}
Map amap = testSplit(list);
System.out.println(amap.get("中国"));
}
static Map map = new HashMap();
public static Map testSplit(List list){
int mapinI = 1;
String firString=null;
if(list.size()>=1){
firString =list.get(0).toString();
map.put(firString, mapinI);
list.remove(0);
}
int i= 0;
for( ;i<list.size();i++) {
String falgString = list.get(i).toString();
if(falgString.equals(firString)){
// 加了后去掉
mapinI=mapinI+1;
map.put(firString, mapinI);
list.remove(i);
i=-1;
}
}
if(list.size()>=1){
// 递归
testSplit(list);
}
return map;
}
public static List getList(String p){
String[] s = p.split(",");
List childList = new ArrayList();
for(int i = 0;i<s.length;i++){
childList.add(s[i]);
}
return childList;
}
}
import java.util.Map;
import java.util.TreeMap;//统计单词出现的次数
public class Frequency {
public static void main(String[] args) {
Map<String, Integer> m = new TreeMap<String, Integer>();// TreeMap...带排序的Map String str = "中国,美国,日本,朝鲜,中国,中国,美国,越南";
String[] strArray=str.split(",");
for (String word : strArray) {
Integer freq = m.get(word);// 获取此单词以前出现的次数 m.put(word, (freq == null ? 1 : freq + 1));
} System.out.println(m);
}
}
private static void test(String arg,String regex){
HashMap<String,IntValue> container = new HashMap<String,IntValue>();
String[] argArray = arg.split(regex);
for(int i=0;i<argArray.length;i++){
if(container.containsKey(argArray[i])){
IntValue iv = container.get(argArray[i]);
iv.calculate();
}else{
container.put(argArray[i], new IntValue());
}
}
print(container);
}
private static void print(Map map){
for(Iterator iter = map.entrySet().iterator();iter.hasNext();){
Map.Entry<String,IntValue> e = (Entry<String, IntValue>) iter.next();
System.out.println(e.getKey() + "-->" + e.getValue().getValue());
}
}
static class IntValue{
int counter = 1;
public void calculate(){
this.counter++;
}
public int getValue(){
return this.counter;
}
}
我一个论坛可能有成千上万个帖子,每个帖子就是一句话,我现在用一个分词的工具,可以把这个句子中的所有的单词(是,啊,呢...之类的无效词语除去)给分出来,一个帖子可能有10个单词,但是一万个帖子,可能就有10万个单词,加入想CSDN这样的能有多少帖子了,单词数有多少?
当然单词肯定有重复的。就是计算单词出现的次数的多少。这些单词在数据库中也好,在文件中也好,取出来容易,关键是好的算法来计算了。
至于个数的排序,能用程序固然不错,但是第一步总要计算个数,排序,可以利用exacle或其他。
public static void main(String[] args) {
String str = "中国,美国,日本,朝鲜,中国,中国,美国,越南";
String reg = "中国";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(str);
int i = 0;
while(m.find()) {
i++;
}
System.out.println(i);
}
String[] workArray = works.split(",");
for(int i = 0; i < workArray.length; i++) {
if(map.containsKey(workArray[i])) {
Integer value = (Integer) map.get(workArray[i]);
map.put(workArray[i], new Integer(value.intValue() + 1));
} else
map.put(workArray[i], new Integer(1));
}
for(Iterator iter = map.keySet().iterator(); iter.hasNext();) {
String key = (String) iter.next();
System.out.println(key + " 的个数 " + ((Integer)map.get(key)).intValue());
}