如何按字符查找字符串的所有组合

时间:2019-05-24 02:59:19

标签: java

例如,如果我有

CAT,

在JAVA中,我希望所有可能的字符组合一次更改1个字符(不包括组合CAT):

AAT
BAT
DAT
EAT
.
.
.
ZAT

CBT
CCT
CDT
.
.
.
CZT

CAA
CAB
CAC
.
.
.
CAZ

到目前为止,我已经拥有了:

public class alphaTesting
{
   public static void main(String[] args) throws Exception 
   {    
      char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();    

    for(int i = 0 ; i < alphabet.length ; i++)
    {
        System.out.println(alphabet[i] + "\n");
    }

    String word = "cat";

    for(int i = 0 ; i < word.length() ; i++)
    {
        for(int j = 0 ; j < alphabet.length ; j++)
        {
            // System.out.println(alphabet[i] + "\n");
            // System.out.println(charAt(i) = )
            word = word.replace(word.charAt(i), alphabet[j]);
            System.out.println(word);
        }       
    }

   }
}

以下是输出的前几行:

aat
bbt
cct
ddt
eet
fft
ggt

但是在进入word.charAt(1)之前,内循环不是应该先运行所有字母吗?

2 个答案:

答案 0 :(得分:1)

如果您喜欢更简洁的代码,则下面的代码应该可以完成。 我在这里使用了一个名为vavr的功能库。 您可能需要将其添加到依赖项中。

import io.vavr.collection.Stream;
import io.vavr.collection.Traversable;

public class Main {
    public static void main(String[] args) {
        Stream.ofAll("abcdefghijklmnopqrstuvwxyz".toCharArray())
                .map(Character::toUpperCase)
                .combinations(3)
                .map(Traversable::mkString)
                .filter(s -> !s.equals("CAT"))
                .take(100)
                .forEach(System.out::println);
    }
}

take(100)仅采用前100个值。您可以将其更改为采用任意数量的值,也可以将其删除以获取所有值。

注意:这是JAVA-8

答案 1 :(得分:1)

这有效

字符串word2 =“”;

 for(int i = 0 ; i < word.length() ; i++)
            {
                for(int j = 0 ; j < alphabet.length ; j++)
                {
                    // show indices
                    System.out.println("i = " + i + " j = " + j);           
                    word2 = word.substring(0,i) + alphabet[j] + word.substring(i+1); ;
                            if (!word2.equals(word) {
                            System.out.println(word2);
                            }
                }

            }