首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

帮小弟我看看,这个HashSet里面如何可以有重复的值

2012-07-31 
帮我看看,这个HashSet里面怎么可以有重复的值程序的目标是读取一段含有重复单词的字符串,然后程序过滤掉其

帮我看看,这个HashSet里面怎么可以有重复的值
程序的目标是读取一段含有重复单词的字符串,然后程序过滤掉其中的重复的部分,返回一个没有重复单词的字符串,我用了两种方法来做,第一个是没有问题的如下:
public class Test{
public static void main(String[] args){
String str="你好 你好吗 销售 财务 你好 IT CSDN IT";
StringTokenizer st=new StringTokenizer(str);
Set set=new HashSet();
while(st.hasMoreTokens()){
set.add(st.nextToken());
}
StringBuffer sb=new StringBuffer();
for(Iterator i=set.iterator();i.hasNext();){
sb.append((String)i.next()).append(' ');
}

System.out.println(sb.toString());
  }
}
运行结果为:财务 你好吗 你好 CSDN IT 销售 
第二个方法用的是正则表达式
public class TestSplit {

public static void main(String[] args){
String str="你好 你好吗 销售 财务 你好 IT CSDN IT";

Set<String> set=new HashSet<String>();
Pattern p=Pattern.compile("\\b(.+)\\b");
Matcher matcher=p.matcher(str);
matcher.find();
for(int i =0; i<matcher.groupCount();i++){
set.add(matcher.group(i).toString());
}
System.out.println(set);

StringBuffer sb=new StringBuffer();
for(Iterator<String> i=set.iterator();i.hasNext();){
sb.append((String)i.next()).append(' ');
}
System.out.println(sb.toString());
}
}
运行结果为:[你好 你好吗 销售 财务 你好 IT CSDN IT]
你好 你好吗 销售 财务 你好 IT CSDN IT 
也就是HashSet中有重复值,这个是什么情况?


[解决办法]
你的正则有问题,正则默认是贪婪匹配的。所以,你这里等于只匹配了一次,set里只有一个元素,就是“你好 你好吗 销售 财务 你好 IT CSDN IT”

改下正则

Java code
Set<String> set=new HashSet<String>();        Pattern p=Pattern.compile("\\b(.+?)\\b");        Matcher matcher=p.matcher(str);        while(matcher.find()){            set.add(matcher.group().toString());        }                System.out.println(set);
[解决办法]
如楼上所说,正则问题,还有个简单方法:String str = "你好 你好吗 销售 财务 你好 IT CSDN IT";

Set<String> set = new HashSet<String>();

String[] values = str.split(" ");
for (String string : values) {
set.add(string);
}
System.out.println(set);

热点排行