比较java中的两个字符串

比较java中的两个字符串,java,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.pr

我正试图通过使用一个算法来比较字符串,如下所示 我的代码不起作用。。在运行代码之前,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)
如何解决这个问题??
谢谢你的代码有两个问题:-

1) 根据您的逻辑,
tigert
也是回文,但实际上不是。回文是指单词完全颠倒并且仍然相同。目前,您只检查第一个和最后一个字符


2) 字符串在内部作为
字符数组保存
,数组的索引长度从0到
长度-1
代码有两个问题:-

1) 根据您的逻辑,
tigert
也是回文,但实际上不是。回文是指单词完全颠倒并且仍然相同。目前,您只检查第一个和最后一个字符


2) 字符串在内部作为
字符数组保存,数组的索引从0到
长度-1
如果
(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))
如果
(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))
不确定您想要什么,但您的
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");
 if (k.equals(n)) {
            System.out.println("palindrom");
        } else {
            System.out.println("not palindrom");
备选方案:

如果要比较两个
字符串
,也可以使用
.equals
方法,如下所示:

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

不确定您想要什么,但您的
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");
 if (k.equals(n)) {
            System.out.println("palindrom");
        } else {
            System.out.println("not palindrom");
备选方案:

如果要比较两个
字符串
,也可以使用
.equals
方法,如下所示:

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

使用
k.charAt(k.length()-1)
。charAt()是0索引的,所以长度为9意味着你可以用0-8调用charAt()。你是个和蔼可亲的人。。。上帝保佑你:)谢谢你明白你只是在检查最后一个字符,以检查它是否是
回文
,这显然是不正确的不,我不是说…我想检查所有序列你说你想比较两个字符串,但只将一个传递到方法中。--你说你想使用递归,但是没有递归调用。任何地方“比较两个字符串”和“”(向后或向前读取相同内容的单词)之间的关系是什么?使用
k.charAt(k.length()-1)
。charAt()是0索引的,所以长度为9意味着你可以用0-8调用charAt()。你是个和蔼可亲的人。。。上帝保佑你:)谢谢你明白你只是在检查最后一个字符,以检查它是否是
回文
,这显然是不正确的不,我不是说…我想检查所有序列你说你想比较两个字符串,但只将一个传递到方法中。--你说你想使用递归,但是没有递归调用。任何地方“比较两个字符串”和“”(向后或向前读取相同内容的单词)之间的关系是什么?OP不检查
第一个和最后一个
,而只检查
最后一个
,如果索引错误已修复,我想比较两个字符串,而不是字符,,,thanksOP没有检查
第一个和最后一个
,而是只检查
最后一个
,如果索引错误已修复,我想比较两个字符串而不是字符,,,,,,,Thanksp我想比较两个字符串而不是字符,,,,,,Thanksp我想比较两个字符串而不是字符,,,谢谢