我的要求是,如果我有两个字符串,我应该得到两个字符串的交集-意味着返回字符串的公共元素而不重复。
我的做法是:
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);现在,交交包含交集,并包含联合,如下所示:
集合的相交:t,集合的一个联合: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)**有人能澄清这一点吗?
发布于 2014-01-11 12:26:46
StringBuilder builder = new StringBuilder();
for (Character c : inter) {
builder.append(c.charValue());
}
String interAsString = builder.toString();发布于 2014-01-11 12:35:10
正如我所说的,创建一个StringBuilder,遍历Set并追加每个字符。最后,调用sb.toString()并将此结果赋值给您的String变量。
这里还有一个爪哇-8解决方案:
String s = inter.stream().collect(StringBuilder::new,
StringBuilder::append,
StringBuilder::append).toString();发布于 2014-01-11 12:35:17
请参阅下面的代码片段:
StringBuffer b = new StringBuffer();
Iterator i = inter.iterator();
while(i.hasNext())
{
b.append(i.next().toString());
}
String interString = b.toString();现在,interString会得到你想要的东西。希望这能有所帮助。
https://stackoverflow.com/questions/21062178
复制相似问题