首页 > 解决方案 > 在 java 的回文编中使用大写的错误

问题描述

package Assignments;

import java.util.Scanner;

public class Assignment1 {

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String str = sc.next();
    int i=0,j=str.length()-1,count=0;
    while(i!=j) {
        if(str.charAt(i)!=str.charAt(j)) {
            count++;
            break;
        }
        i++;
        j--;
    }
    if(count!=0) {
        System.out.println("Not a Palindrome");
    }
    else {
        System.out.println("Palindrome");
    }

}

}

在输入中输入大写字母后,它显示错误。“assa”作为输入工作正常,但“Assa”显示错误。我知道这是某个地方的小故障,但我是 java 新手。任何人都可以帮忙吗?

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
    at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48)
    at java.base/java.lang.String.charAt(String.java:709)
    at Assignments.Assignment1.main(Assignment1.java:12)

标签: javastringpalindrome

解决方案


a并且A不是同一个字符。如果您不关心大小写,则可以在比较它们时将所有字符显式转换为小写(或大写):

while (i != j) {
    if (Character.toLowerCase(str.charAt(i)) != Character.toLowerCase(str.charAt(j))) {
        count++;
        break;
    }
    i++;
    j--;
}

编辑:
问题中更新的异常澄清了问题 - 它与大小写差异无关,但与偶数个字符的字符串处理错误有关。要处理此问题,您可以使用<运算符而不是!=

while (i < j) {

推荐阅读