我想使用for循环,遍历每个字符串,并逐个输出每个字符。
String a = "apple";
String b = "class";
for (int i = 0; i < a.length() ; i++) { // - 1 because 0 = 1
System.out.print(a.charAt(i));
for (int j = 0; j < b.length(); j ++) {
System.out.print(b.charAt(j));
}
}
我在与内循环作斗争。
目前我的输出如下:
AClasspClasspClasslClasseClass
然而,我想实现以下目标:
acplpalses
扩展问题:
一个字符串反向输出,另一个字符串正常输出,怎么样?
当前尝试:
for (int i = a.length() - 1; i >= 0; i--) {
System.out.println(a.charAt(i));
for (int j = 0; j < b.length(); j ++) {
System.out.println(b.charAt(j));
}
}
然而,这只是如上所述输出,只是以与以前相同的格式按相反顺序输出"Apple":
eclasslclasspclasspclassaclass
您不需要两个循环,因为两个Strings
都使用相同的标记
相同顺序:
-
简单的相同大小的情况:
for (int i = 0; i < a.length(); i++) { System.out.print(a.charAt(i)); System.out.print(b.charAt(i)); }
-
复杂不同大小的情况:
int minLength = Math.min(a.length(), b.length()); for (int i = 0; i < minLength; i++) { System.out.print(a.charAt(i)); System.out.print(b.charAt(i)); } System.out.print(a.substring(minLength)); // prints the remaining if 'a' is longer System.out.print(b.substring(minLength)); // prints the remaining if 'b' is longer
不同顺序:
-
简单的相同大小的情况:
for (int i = 0; i < a.length(); i++) { System.out.print(a.charAt(i)); System.out.print(b.charAt(b.length() - i - 1)); }
-
复杂不同大小的情况:
int minLength = Math.min(a.length(), b.length()); for (int i = 0; i < minLength; i++) { System.out.print(a.charAt(i)); System.out.print(b.charAt(b.length() - i - 1)); } System.out.print(a.substring(minLength)); System.out.print(new StringBuilder(b).reverse().substring(minLength));
另一个使用Java 8流的解决方案:
System.out.println(
IntStream.range(0, Math.min(a.length(), b.length()))
.mapToObj(i -> "" + a.charAt(i) + b.charAt(i))
.collect(Collectors.joining(""))
);
对于扩展问题-假设两个字符串的大小相同
for (int i = 0; i < a.length(); i++) {
System.out.print(a.charAt(a.length()-1-i));
System.out.print(b.charAt(i));
}