比较java中的两个字符串

时间:2015-10-08 22:17:49

标签: java

我正在尝试使用如下所示的算法与字符串进行比较 我的代码不起作用..在运行代码之前,eclipse没有显示任何错误

    public class MysteryClass {
    public static void mystery(String n) {
        String k= "alla";
            if (k.charAt(k.length())==n.charAt(n.length())) {
                System.out.println("palindrom");
            } else {
                System.out.println("not palindrom");

            }
        }

    public static void main(String[] args) {
        MysteryClass.mystery("alla");
    }
}

但我们运行的代码

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
    at java.lang.String.charAt(String.java:658)
    at shapes.MysteryClass.mystery(MysteryClass.java:6)
    at shapes.MysteryClass.main(MysteryClass.java:15)

如何解决? 感谢

3 个答案:

答案 0 :(得分:0)

您的代码有两个问题: -

1)根据你的逻辑,tigert也是回文,但事实并非如此.Palindrome是这个词完全颠倒并且它仍然是相同的。目前,你只检查第一个和最后一个字符< / p>

2)字符串在内部保持为char array,数组的索引从0到length -1

答案 1 :(得分:0)

错误是由(k.charAt(k.length())==n.charAt(n.length()))语句引起的 高于k.length()返回4.语句然后解析为:

(k.charAt(4) 

这将通过错误,因为函数charAt从索引0计数。因此它计算索引0,1,2,3处的字符,并且您要求它在索引4处获取不存在的字符。 建议的替代方案是: (k.charAt(k.length() -1)==n.charAt(n.length()-1))

答案 2 :(得分:0)

不确定您想要什么,但是您的StringIndexOutOfBoundsException是因为访问不存在的数组索引而导致的。

String k = "alla"为例,k.length()将返回4,因为"alla"有四个字符,而您正在访问k.charAt(4)"alla"闯入如下:

a l l a  // string
0 1 2 3  // index

正如您所看到的"alla"的最后一个索引是3,这就是您获得StringIndexOutOfBoundsException的原因。但您可以使用.length() -1解决此问题,如下所示:

 if (k.charAt(k.length()-1)==n.charAt(n.length()-1)) {
            System.out.println("palindrom");
        } else {
            System.out.println("not palindrom");

<强>替代:

如果您想比较两个string,您也可以使用.equals方法,如下所示:

 if (k.equals(n)) {
            System.out.println("palindrom");
        } else {
            System.out.println("not palindrom");