为什么我的String比较代码不起作用?

时间:2019-05-26 16:44:55

标签: java string compare

此代码引发

  

错误“线程“主”中的异常”   java.lang.ArrayIndexOutOfBoundsException:0

     

在basic2.compareStrPractice.main(compareStrPractice.java:15)“

int i;
    char[] chr1 = {};
    char[] chr2 = {};
    String s1 = "man";
    String s2 = "nam";

        for ( i= 0; i<s1.length(); i++){

            chr1[i] = (char)s1.charAt(i);
            chr2[i] = (char)s2.charAt(i);

        }
        if ((chr1[0] == chr2[2]) && (chr1[1] == chr2[1]) && (chr1[2] == chr2[0])){

            System.out.println("They are Palindrom!");
        }

}

我要打印对帐单。但是会引发ArrayOutOfBoundary错误。

3 个答案:

答案 0 :(得分:2)

问题在于您声明字符数组的方式。

char[] chr1 = {};

定义数组大小的方式为0。

在Java中,您需要像这样指定数组的大小:

char[] chr1 = new char[3];

它的作用是声明一个预定义大小为3的char数组。

答案 1 :(得分:1)

如果您试图为回文式编写代码,这在许多方面都是错误的,但是对于错误,您正在初始化一个大小为0的char的空数组,请使用此

char[] chr1 = new char[3];

答案 2 :(得分:0)

您还应该首先检查长度以确保长度相同。否则,您可能会得到另一个ArrayIndexOutOfBoundsException。当您使用较长的字符串长度来索引较短的字符数组时,就会发生这种情况。

由于对于较长的字符串,您不想在单个if语句中进行多次比较,因此应使用循环并从一个数组的开头和另一个数组的结尾进行比较。因此,如果长度为5,则可以比较0和4,然后分别是1和3,然后2和2,然后3和1等等的字符。

以下是一些其他有用的技巧。您无需创建空数组并填充它们。字符串提供了该功能。

char[] chr1 = s1.toCharArray();

实际上,您不需要分配给String变量。

char[] chr1 = "man".toCharArray();

以防万一您想分配给String而不是char数组,您可以这样做以保存单个字符串数组。

String[] str1 = "abcdefghijklmnopqrstuvwxyz".split("");