[英]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.