循环中的字符串连接。 Java

String concatenation in loop. Java

我正在尝试在多个循环中连接字符串,但遇到了问题。

我尝试用“StringBuilder”来做,但它会导致内存泄漏。唤醒它工作的唯一方法是使用 printf 函数, 对我来说不合逻辑。我认为 StringBuiler 或 String 的 concat() 函数是连接字符串的更有效方法。 这是工作代码的示例:

    public static List<String> generateCoolNumbers() {
       final String[]  LETTERS = {"А", "В", "Е", "К", "М", "Н", "О", "Р", "С", "Т", "У", "Х"};
        List<String> coolNumber = new ArrayList<>();
        for (String letterOne : LETTERS) {
            for (int number = 111; number <= 999; number += 111) {
                for (String letterTwo : LETTERS) {
                    for (String letterThree : LETTERS) {
                        for (int region = 1; region < 200; region++) {
                            if (region <= 9) {
                                coolNumber.add(String.format("%s%d%s%s0%d", letterOne, number, letterTwo,
                                        letterThree, region));
                                continue;
                            }
                            coolNumber.add(String.format("%s%d%s%s%d", letterOne, number, letterTwo,
                                    letterThree, region));
                        }
                    }
                }
            }
        }
        return coolNumber;
    }

最让我困惑的是,下面的代码不起作用,因为“Java 堆 space”异常,而不是更有效率。


    public static List<String> generateCoolNumbers() {
       final String[]  LETTERS = {"А", "В", "Е", "К", "М", "Н", "О", "Р", "С", "Т", "У", "Х"};
        List<String> coolNumber = new ArrayList<>();
        StringBuilder strb = new StringBuilder();
        for (String letterOne : LETTERS) {
            for (int number = 111; number <= 999; number += 111) {
                for (String letterTwo : LETTERS) {
                    for (String letterThree : LETTERS) {
                        for (int region = 1; region < 200; region++) {
                            if (region <= 9) {
                                strb.append(letterOne);
                                strb.append(number);
                                strb.append(letterTwo);
                                strb.append(letterThree);
                                strb.append("0" + region);
                                coolNumber.add(strb.toString());
                                continue;
                            }
                            strb.append(letterOne);
                            strb.append(number);
                            strb.append(letterTwo);
                            strb.append(letterThree);
                            strb.append(region);
                            coolNumber.add(strb.toString());
                        }
                    }
                }
            }
        }
        return coolNumber;
    }

您没有将字符串附加到列表中。

public static List<String> generateCoolNumbers() {
    final String[]  LETTERS = {"А", "В", "Е", "К", "М", "Н", "О", "Р", "С", "Т", "У", "Х"};
    List<String> coolNumber = new ArrayList<>();
    for (String letterOne : LETTERS) {
        for (int number = 111; number <= 999; number += 111) {
            for (String letterTwo : LETTERS) {
                for (String letterThree : LETTERS) {
                    for (int region = 1; region < 200; region++) {
                        StringBuilder strb = new StringBuilder();
                        if (region <= 9) {
                            strb.append(letterOne);
                            strb.append(number);
                            strb.append(letterTwo);
                            strb.append(letterThree);
                            strb.append("0" + region);
                            coolNumber.add(strb.toString());
                            continue;
                        }
                        strb.append(letterOne);
                        strb.append(number);
                        strb.append(letterTwo);
                        strb.append(letterThree);
                        strb.append(region);
                        coolNumber.add(strb.toString());
                    }
                }
            }
        }
    }
    return coolNumber;
}

您需要清除或重置循环内的字符串生成器:

public static ArrayList<String> generateCoolNumbers() {
   final String[]  LETTERS = {"A", "B", "E", "K"};
    ArrayList<String> coolNumber = new ArrayList<String>();
    for (String letterOne : LETTERS) {
        for (int number = 111; number <= 999; number += 111) {
            for (String letterTwo : LETTERS) {
                for (String letterThree : LETTERS) {
                    for (int region = 1; region < 200; region++) {
                                StringBuilder strb = new StringBuilder();

                        if (region <= 9) {
                            strb.append(letterOne);
                            strb.append(number);
                            strb.append(letterTwo);
                            strb.append(letterThree);
                            strb.append("0" + region);
                        } else {
                        strb.append(letterOne);
                        strb.append(number);
                        strb.append(letterTwo);
                        strb.append(letterThree);
                        strb.append(region);
                        }
                    coolNumber.add(strb.toString());
                    }
                }
            }
        }
    }
    return coolNumber;
}

你也可以使用 strb.setLength(0);