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