Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从两个字符串中获取所有可能的字母组合_Java_String - Fatal编程技术网

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

Java 从两个字符串中获取所有可能的字母组合,java,string,Java,String,如果我有两个带字母的字符串,如何获得其中所有可能的字符组合 例如,如果我有一个字符串“abc”和另一个“def”,我如何获得所有组合,如: 广告 ae af 屋宇署 是 男朋友……等等 组合的第一个字母始终来自第一个字符串,第二个字母来自第二个字符串 我希望它能够处理多个字符串。它是用于文本预测的。每个字符串代表移动电话键盘上的字母 public void getCombos(){ String s1 = "abc" String s2 = "def" } 通常情况下,我会尽量避免嵌套循环

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

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

广告 ae af

屋宇署 是 男朋友……等等

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

我希望它能够处理多个字符串。它是用于文本预测的。每个字符串代表移动电话键盘上的字母

public void getCombos(){

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

}

通常情况下,我会尽量避免嵌套循环,但在这种情况下,我看不到其他方法(嗯,不是更好的方法)

编辑

要获取单个字符,请执行以下操作:

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上有一些很好的答案

尝试嵌套的for,结合字符串#tocharray()方法

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

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)));
        }
    }
}
公共静态无效组合(字符串s1、字符串s2){
对于(int i=0;i
如果需要避免重复,可以将字符插入一个集合(请参见HashSet),然后使用它们生成字符串。您还可以跟踪使用的每个字符,避免重复使用它们


无论如何,希望我的例子能帮助你入门。

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

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

例如,我们有S1=“abc”,S2=“ade”,我们将有如下树:


根据这张图片,我们将写“a”“b”“b”“e”和“aa(只写一次)”,ca、cb、cd(两个字符的字符串),这将避免重复,所有字符串都将被打印出来

我投票决定关闭。这只是一个“给我一些代码”的问题,提问者没有明显的努力。@DuncanJones抱歉,这是更大代码的一部分,只是不知道如何处理。不-这不是不尝试任何东西的借口。即使是失败的尝试也会引起我们的兴趣。但一份要求声明和其他任何东西都不会让我想知道我应该收取多少小时工资。@邓肯琼斯说得很公平。我所做的任何尝试都是一派胡言。没有看到它的价值。@user1835504:确切的要求是什么?任何可能的组合(如果允许重复,甚至是'abcdef'或'abcabc')或最大长度或…?如果有重复字符,这将失败,正如您在文章中所看到的,这些是手机键盘的表示。如果代码中有重复项,那将是一个很好的失败。@Vulcan:你说得对。今天已经回答了太多的PHP问题。而且,此答案不处理非组合解决方案,例如
a
b
,等等。一旦包含了这些字符串,并且修复了一些小的编译错误,这个答案就会得到我的投票。@Aquillo:这只给出了两个字符长度的字符串,而不是所有的组合,这是一个非常少的答案。想把它充实一点吗?一个问题不费吹灰之力就得不到答案,这对我来说是个不错的选择。。。对于站点来说,比编写代码IMHO要好得多。在转换对象/原语IMHO时,“+//code>是一个很糟糕的习惯。你说得对。关于空concat,可以使用String.format(甚至String.valueOf),这是我想到的使其工作的最快/最简单的方法。为了简短的回答,没问题。虽然这是人们养成坏习惯的一种方式,但这也是我记下它的原因;)只是好奇,不是批评你或我的代码。什么会更快?将
字符串拆分为
char[]
或多次请求
charAt()。显然,这取决于字符串的大小,请参见:
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)));
        }
    }
}