帮我看看,这个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);