首页 > 解决方案 > 构建所有可能字符串并找到特定字符串的代码无法按预期工作

问题描述

我试图解决的部分任务是构建所有可能的字母和空格组合。我试图找到一个特定的字符串,同时构建组合。我认为我很好地实施了解决方案,但我的测试告诉我并非如此。

我从数组中获取字符,并在 for 循环中从它们构建一个字符串,然后打印解决方案。当我构建了“1 个字符组合”的所有组合时,我将继续使用“2 个字符组合”。我有一个布尔值来检查 StringBuilder 的内容是否等于我要查找的给定字符串。我检查了,示例 String 确实构建了,但布尔值没有改变。

public static void main(String[] args) throws InterruptedException {

    findString("rxc");

}

public static void findString(String string) {
    boolean isFound = false;
    String allChars = "abcdefghijklmnopqrstuvwxyz ";
    char[] sequence = allChars.toCharArray();
    int lengthOfExpression = 3;
    //builder contains 3 whitespaces at the beginning
    StringBuilder builder = new StringBuilder("   ");

    int[] pos = new int[lengthOfExpression];
    int total = (int) Math.pow(allChars.length(), lengthOfExpression);
    for (int i = 0; i < total; i++) {
        for (int x = 0; x < lengthOfExpression; x++) {
            if (pos[x] == sequence.length) {
                pos[x] = 0;
                if (x + 1 < lengthOfExpression) {
                    pos[x + 1]++;
                }
            }
            builder.setCharAt(x, sequence[pos[x]]);
        }
        pos[0]++;

        if (builder.toString() == string) {
            isFound = true;
        }

        System.out.println(builder.toString());
    }
    System.out.println(isFound);
}

预期的结果将是最后打印的“真实”。相反,我的结果如下:

//省略了很多组合行

r
s
t
u
v
w
x
y
z

错误的

标签: javastringalgorithm

解决方案


不要将字符串与 进行比较==.equals()而是使用;所以对于你的代码:

更改if (builder.toString() == string)if (builder.toString().equals(string))


推荐阅读