我的要求是如果我有2个字符串,我应该得到2个字符串的交集 - 意味着返回字符串的公共元素而没有重复。
我的方法是:
String str1="Character";
String str2="National";
Set<Character> set1=new HashSet<Character>();
Set<Character> set2=new HashSet<Character>();
for(char c:str1.toLowerCase().toCharArray()){
set1.add(c);
}
for(char c:str2.toLowerCase().toCharArray()){
set2.add(c);
}
Set<Character> inter=new HashSet<Character>(set1);
Set<Character> union=new HashSet<Character>(set1);
inter.retainAll(set2);
union.addAll(set2);
现在交集包含交集和union包含union:
集合的交集:[t,a] 集合联盟:[t,e,c,r,a,n,o,l,h,i]
但我想将这些集合转换回字符串为“ta”和“tecranolhi”。
我正在使用String arr1[]=inter.toArray(new String[0]);
,但它会出错。
**Exception in thread "main" java.lang.ArrayStoreException: java.lang.Character
at java.util.AbstractCollection.toArray(Unknown Source)
at StringInter.main(StringInter.java:22)**
有人可以澄清一下吗?
答案 0 :(得分:3)
正如我所说,创建一个StringBuilder
,遍历Set
并附加每个字符。最后,请致电sb.toString()
并将此结果分配回您的String
变量。
这里也是一个java-8解决方案:
String s = inter.stream().collect(StringBuilder::new,
StringBuilder::append,
StringBuilder::append).toString();
答案 1 :(得分:2)
StringBuilder builder = new StringBuilder();
for (Character c : inter) {
builder.append(c.charValue());
}
String interAsString = builder.toString();
答案 2 :(得分:0)
请参阅下面的代码段:
StringBuffer b = new StringBuffer();
Iterator i = inter.iterator();
while(i.hasNext())
{
b.append(i.next().toString());
}
String interString = b.toString();
现在,interString将拥有您想要的。希望这会有所帮助。