1
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()方法用于查找常见字符。

谁能帮我减少代码行。

4

5 回答 5

3

如果你使用Guava库,你可以简单地使用Sets.intersection()和避免样板。

于 2012-12-15T16:58:26.090 回答
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不在字符string2commonChars因此是:

itaahan

更多在这个讨论中。

第二个replaceAll删除字符的冗余实例,在这种情况下是最后两个 'a'。uniqueCommonChars变成:

ithan

这个正则表达式如何工作的一个很好的分解是在这个讨论中。

编译正则表达式的计算成本相对较高,因此我们可以将其预编译为static final Pattern. 由于其他正则表达式是基于输入的,因此无法进行预编译。

于 2012-12-15T18:06:53.560 回答
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);
      }
    }
于 2012-12-15T17:11:58.737 回答
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("(?<=.)")));
于 2012-12-15T17:02:45.743 回答
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;
}
于 2012-12-15T17:20:03.897 回答