java for loop第一个字符串的第一个字符串,然后是第二个字符串

时间:2014-11-30 04:44:03

标签: java

当我输入两个相等长度的字符串时,我的代码工作得很好,但是当我像不同长度的字符串一样,它会说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);

4 个答案:

答案 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

我们可以使用ifStringBuilder来简化第二个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的一端时,第一个循环终止