import java.util.*;
class set {
public static void main(String args[]) {
TreeSet<Character> t1 = new TreeSet<Character>();
TreeSet<Character> t2 = new TreeSet<Character>();
String s1 = "Ambitab bachan";
String s2 = "Ranjikanth";
for (char c1 : s1.toCharArray())
t1.add(c1);
for (char c2 : s2.toCharArray())
t2.add(c2);
t2.retainAll(t1);
System.out.println(t2);
}
}
这个程序在两个不同的字符串中找到共同的字符。在此程序中,TreeSet
用于存储值,retainAll()
方法用于查找常用字符。
任何人都可以帮我减少代码行。
答案 0 :(得分:3)
如果您使用Guava库,则可以使用Sets.intersection()
并避免使用样板。
答案 1 :(得分:2)
当您处理字符串时,您可以放弃所有这些对象并使用正则表达式。
private static final Pattern REGEX_DEDUPLICATE = Pattern.compile("(.)(?=.*\\1)");
public void intersect(String string1, String string2) {
String commonChars = string1.replaceAll("[^" + string2 + "]", "");
String uniqueCommonChars = REGEX_DEDUPLICATE.matcher(commonChars).replaceAll("");
return uniqueCommonChars;
}
第一个replaceAll
删除string1
中不的string2
中的所有字符。因此commonChars
:
itaahan
第二个replaceAll
删除了一个字符的冗余实例,在这种情况下是最后两个'a'。 uniqueCommonChars
成为:
ithan
这个正则表达式如何运作的重大细分在this discussion。
编译正则表达式相对计算成本昂贵,因此我们可以将其编译为static final Pattern
。由于其他正则表达式基于输入,因此无法进行预编译。
答案 2 :(得分:1)
我想你可以压缩这个:
TreeSet<Character> t1 = new TreeSet<Character>();
for(char c1:s1.toCharArray())
t1.add(c1);
进入:(已编辑)
TreeSet<String> t1 = new TreeSet<String>(Arrays.asList(s1.split("(?<=.)")));
答案 3 :(得分:1)
更简单一点:
TreeSet<Character> t1 = new TreeSet<Character>();
String s1 = "Ambitab bachan";
String s2 = "Ranjikanth";
for(char c1:s1.toCharArray()) {
if (s2.contains(new Character(c1).toString())) {
t1.add(c1);
}
}
答案 4 :(得分:0)
您可以轻松删除重复代码以构建字符集
public static void main(String args[]) {
TreeSet<Character> t1 = asCharacterSet("Ambitab bachan");
TreeSet<Character> t2 = asCharacterSet("Ranjikanth");
t2.retainAll(t1);
System.out.println(t2);
}
private static Set<Character> asCharacterSet(String value) {
TreeSet<Character> t1 = new TreeSet<Character>();
for (char c1 : value.toCharArray())
t1.add(c1);
return t1;
}