从两个字符串中获取所有可能的字母组合

时间:2013-04-29 19:50:03

标签: java string

如果我有两个带字母的字符串,我如何获得其中所有可能的字符组合?

例如,如果我有字符串“abc”和另一个“def”,我如何获得所有组合,如:

广告 AE AF

BD 是 等...等等。

组合的第一个字母始终来自第一个字符串,第二个字母来自第二个字符串。

我希望它能够使用多个字符串。它用于文本预测。每个字符串将代表手机键盘上的字母。

public void getCombos(){

String s1 = "abc"
String s2 = "def"

}

4 个答案:

答案 0 :(得分:1)

通常情况下我会尝试避免嵌套循环,但在这种情况下我没有看到另一种方式(好吧,不是更好的方法)。

char[] s1array = s1.toCharArray();
char[] s2array = s2.toCharArray();
for(char s1char : s1array) {
    for(char s2char : s2array) {
        String value = String.valueOf(s1char) + String.valueOf(s2char);
        System.out.println(value);
    }
}

修改

为了获得单个字符:

char[] s1array = s1.toCharArray();
char[] s2array = s2.toCharArray();
for(char s1char : s1array) {
    for(char s2char : s2array) {
        String value = String.valueOf(s1char) + String.valueOf(s2char);
        System.out.println(value);
    }
    System.out.println(String.valueOf(s1char));
}
for(char s2char : s2array) {
    System.out.println(String.valueOf(s2char));
}

修改2

如果您想使用所有组合,Stackoverflow上有一些非常好的答案。 Like this one

答案 1 :(得分:0)

尝试嵌套for,结合String#toCharArray()方法

答案 2 :(得分:0)

根据您的描述,我创建了一个简单的二次算法:

public static void combine(String s1, String s2) {
    for(int i = 0; i < s1.length(); i++) {
        System.out.println(s1.charAt(i));
        for(int j = 0; j < s2.length(); j++) {
            System.out.println(String.format("%s%s", s1.charAt(i), s2.charAt(j)));
        }
    }
}

如果您需要避免重复,可以将字符插入集合(请参阅HashSet),然后使用它们生成字符串。您还可以跟踪所使用的每个字符,并避免使用它们两次......

无论如何,希望我的例子可以帮助你开始。

答案 3 :(得分:0)

我想过一个算法,但我不知道如何实现它。

它将是树形结构,其中包括第一级中除重复之外的所有字符,您将自上而下打印每一片叶子。

例如我们有S1 =“abc”,S2 =“ade”我们会有类似下面的树:enter image description here

根据那张图片,我们会写“a”“b”,...,“e”和“aa(只有一次),ca,cb,cd”(两个字符串),这将拯救我们来自重复,所有字符串都将打印出来