请教各位一个字符串查找问题,很着急

netfishx 2005-10-23 04:10:39
有个文本文件,里面是英文文章,现在要统计文章里面的单词的出现次数,要求出现的单词次数都要统计出来.不考虑特殊字符,使用默认分割字符.重点要求考虑算法.
我的想法是从第一个单词开始,查文章中有哪些单词语它一样,见到一样的就计数,然后从文章中删掉。但是又不知道应该怎么实现,请教各位
...全文
235 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
左大神在这 2005-10-23
  • 打赏
  • 举报
回复
我知道是一样的,只是我自己好理解点,呵呵
左大神在这 2005-10-23
  • 打赏
  • 举报
回复
masse兄弟,你的代码可以改成这样吗,
public static void main(String[] args) throws Exception {
// 你要解析的文章
String s = "one,two, three one !mydear four , five";
// 正则表达式,可以添加你自己的分隔符
Pattern p = Pattern.compile("[,.!;?\\s]+");
String[] result =p.split(s);

Map map = new HashMap();
for (int i=0; i<result.length; i++){
int count = 0;
if(map.get(result[i])!=null) count = ((Integer)map.get(result[i])).intValue();
map.put(result[i],new Integer(++count));
}
List list = new ArrayList();
list.addAll( map.keySet());
for(int i=0;i<map.size();i++){
System.out.println((String) list.get(i) + ":" + map.get((String) list.get(i)));
}
}
左大神在这 2005-10-23
  • 打赏
  • 举报
回复
谢谢,看懂了,
netfishx 2005-10-23
  • 打赏
  • 举报
回复
写的非常好,应该解决了我的问题。正在学习,谢谢各位
柯本 2005-10-23
  • 打赏
  • 举报
回复
正则表达式介绍
http://soulogic.com/doc/RegularExpressions/
masse 2005-10-23
  • 打赏
  • 举报
回复
另外set就是数学里面所说的集合,
集合有互异性
也就是里面的元素各不相同,
如果不需要统计出现的次数,用集合就可以

因为要统计次数,我改成了Map,
map里面存了一系列的数据,
是一系列key和一系列value之间的一一对应
其中key是不会重复的

我上面的代码中
key就是单词
value就是出现的次数
左大神在这 2005-10-23
  • 打赏
  • 举报
回复
我明白了,谢谢
masse 2005-10-23
  • 打赏
  • 举报
回复
Pattern是正则表达式里面的东西,
三言两语讲不清楚,
最好自己系统的学习一下吧
Pattern.compile("[,.!;?\\s]+");

这句话就是确定你所说的分隔符,
上面那句话中,决定了你对文章的分隔符有以下:
逗号,
句点.
感叹号!
问号?
空格\\s

其中用[]+表示这些东西可以出现多次

比如:
one,,?.two.,.,? three

上面这个字符串的单词中间连续出现了多个分隔符,
用我的正则表达式,就能正确分隔出
one
two
three
左大神在这 2005-10-23
  • 打赏
  • 举报
回复
看得不是很懂,可能上我对正则表达是不是很熟悉把,呵呵,向masse兄弟学习了
masse 2005-10-23
  • 打赏
  • 举报
回复
抱歉,上面那个没有统计出现次数

改了一下

正则表达式你自己改改,符合自己的要求即可

package promtm;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.regex.*;

public class Main {
public static void main(String[] args) throws Exception {
// 你要解析的文章
String s = "one,two, three one !mydear four , five";
// 正则表达式,可以添加你自己的分隔符
Pattern p = Pattern.compile("[,.!;?\\s]+");
String[] result =p.split(s);

Map map = new HashMap();
for (int i=0; i<result.length; i++){
int count = 0;
if(map.get(result[i])!=null) count = ((Integer)map.get(result[i])).intValue();
map.put(result[i],new Integer(++count));
}

for (Iterator it=map.entrySet().iterator(); it.hasNext(); ) {
Map.Entry entry = (Map.Entry)it.next();
String key = entry.getKey().toString();
int count = ((Integer)entry.getValue()).intValue();
System.out.println(key + ":" + count);
}

}
}
左大神在这 2005-10-23
  • 打赏
  • 举报
回复
masse:Pattern是什么, Pattern p = Pattern.compile("[,.!\\s]+");这句能不能解释下
netfishx 2005-10-23
  • 打赏
  • 举报
回复
是呀,能不能讲的具体一点呢?谢谢
左大神在这 2005-10-23
  • 打赏
  • 举报
回复
呵呵,晕,兄弟现在也在线呀,不好意思,我刷新才看到你发的信息
左大神在这 2005-10-23
  • 打赏
  • 举报
回复
楼上的兄弟能不能把具体的算法写成来,我也很想知道,
masse 2005-10-23
  • 打赏
  • 举报
回复
import java.util.HashSet;
import java.util.Set;
import java.util.regex.*;

public class Main {
public static void main(String[] args) throws Exception {
Pattern p = Pattern.compile("[,.!\\s]+");
Set set = new HashSet();
String[] result =
p.split("one,two, three one !mydear four , five");
for (int i=0; i<result.length; i++)
set.add(result[i]);
// set里面存的字符串就是你要的字符串
}
}
masse 2005-10-23
  • 打赏
  • 举报
回复
正则表达式找单词
用collection去掉重复的,比如HashSet

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧