循环中的字符串连接。 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);
我正在尝试在多个循环中连接字符串,但遇到了问题。
我尝试用“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);