当我输入两个相等长度的字符串时,我的代码工作得很好,但是当我像不同长度的字符串一样,它会说StringIndexOutOfBoundsException。
这是我的代码......我需要输出a5b4c3d21 这不是功课,我只是通过for循环来研究字符串操作。 先谢谢你。
String name1 = "abcd";
String name2 = "12345";
String temp = "";
for (int i = 1; i <= name1.length() || i <= name2.length(); i++) {
temp = temp + name1.charAt(i-1) + name2.charAt(name2.length()-i);
}
System.out.println(temp);
答案 0 :(得分:1)
您需要进行边界检查:
for (int i = 1; i <= name1.length() || i <= name2.length(); i++) {
if (i <= name1.length()) {
temp += name1.charAt(i - 1);
}
if (i <= name2.length()) {
temp += name2.charAt(name2.length() - i);
}
}
您可以使用条件运算符使其更简洁:
for (int i = 1; i <= name1.length() || i <= name2.length(); i++) {
temp += (i <= name1.length() ? name1.charAt(i - 1) : "") +
(i <= name2.length() ? name2.charAt(name2.length() - i) : "");
}
但我推荐第一个版本,更清晰。
答案 1 :(得分:0)
这里有一个逻辑错误:
i <= name1.length() || i <= name2.length()
你要走到较长字符串的末尾。如果 字符串仍然包含字母,那么你继续前进,所以当两个字符串完成时你就停止了。但是如果字符串的长度不同,那么即使在传递一个字符串之后你仍然继续。
尝试:
i <= name1.length() && i <= name2.length()
答案 2 :(得分:0)
我会使用Math.max(int,int)
来获得更大的String
长度。并从0迭代到较大String
的长度。测试每个位置是否小于String name1
的最后一个字符(如果是)打印该字符。然后测试name2
。像
String name1 = "abcd";
String name2 = "12345";
for (int i = 0, len = Math.max(name1.length(), name2.length()); i < len; i++) {
if (i < name1.length()) {
System.out.print(name1.charAt(i));
}
if (i < name2.length()) {
System.out.print(name2.charAt(name2.length() - i - 1));
}
}
System.out.println();
输出(按要求)
a5b4c3d21
我们可以使用if
和StringBuilder
来简化第二个reverse()
中的数学计算
String name1 = "abcd";
String name2 = "12345";
StringBuilder sb = new StringBuilder(name2);
sb.reverse();
for (int i = 0, len = Math.max(name1.length(), sb.length()); i < len; i++) {
if (i < name1.length()) {
System.out.print(name1.charAt(i));
}
if (i < sb.length()) {
System.out.print(sb.charAt(i));
}
}
System.out.println();
输出相同。
答案 3 :(得分:0)
试试这个
String name1 = "abcd";
String name2 = "12345";
String temp = "";
int i;
for (i = 0; i < name1.length() && i < name2.length(); i++) {
temp = temp + name1.charAt(i) + name2.charAt(name2.length()-i-1);
}
for (; i < name1.length(); i++) {
temp = temp + name1.charAt(i);
}
for (; i < name2.length(); i++) {
temp = temp + name2.charAt(name2.length()-i-1);
}
System.out.println(temp);
a5b4c3d21
当其中一个字符串具有更大的长度时,在第一个循环之后继续2个循环。当到达String的一端时,第一个循环终止