簡體   English   中英

比較Java中的兩個字符串

[英]compare two strings in 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)

如何解決? 謝謝

您的代碼有兩個問題:

1)按照您的邏輯, tigert也是回文,但實際上不是。回文是單詞完全顛倒並且仍然相同時的詞。當前,您僅在檢查第一個和最后一個字符

2)字符串在內部保留為char array並且數組的索引從0到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");

替代方案:

如果要比較兩個string ,也可以使用.equals方法,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM