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);
    }
}

このプログラムは、2 つの異なる文字列で共通の文字を見つけます。このプログラム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;
}

1つ目は、にないreplaceAllすべての文字を削除します。したがって:string1string2commonChars

itaahan

このディスカッションの詳細。

2つ目replaceAllは、文字の冗長インスタンス(この場合は最後の2つの「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 に答える