简体   繁体   English

循环中的字符串连接。 Java

[英]String concatenation in loop. Java

I'm trying to concat string in multiple loop, and I'm having trouble with it.我试图在多个循环中连接字符串,但我遇到了麻烦。

I tried to do it with "StringBuilder", but it causes memory leak.我试着用“StringBuilder”来做,但它会导致 memory 泄漏。 the only way to wake it work, was to do it with printf function, witch is not logical for me.唤醒它工作的唯一方法是使用 printf function,女巫对我来说不合逻辑。 I thought that StringBuiler or concat() function of String are more efficient way to concatenate strings.我认为 StringBuiler 或 concat() function of String 是连接字符串的更有效方法。 Here's example of working code:这是工作代码的示例:

    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;
    }

And what is most confusing for me, that code below is not working, because of "Java heap space" exception, instead of being more efficient.最让我困惑的是,下面的代码没有工作,因为“Java 堆空间”异常,而不是更高效。


    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;
    }

You were not appending the strings to list.您没有将字符串附加到列表中。

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;
}

You need to clear or reset the string builder inside your loop:您需要清除或重置循环内的字符串生成器:

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;
}

you can also use strb.setLength(0);你也可以使用strb.setLength(0);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM