java - 在 Java 中检查单词是否为回文时如何正确使用 charAt()?

标签 java

对于像“madam”、“madama”等简单的单词,代码可以正常工作,但对于像“babzsákfotelben sok a bab”这样的较长字符串,会返回错误的答案。

Scanner sc = new Scanner(System.in);

        String A = sc.nextLine();

        String myString = A.toLowerCase().replaceAll("\\s", "");
        int i = 0;
        int j = myString.length() - 1;

        while (i < j) {

            if (myString.charAt(i) != myString.charAt(j)) {

                System.out.println("No");
                break;

            }

            i++;
            j--;

            System.out.println("Yes");
            break;
        }
    }
}

最佳答案

您当前代码中的问题是您的循环只执行一次,因为在递增 i 和递减 j 之后,您打印“Yes”并跳出循环。

您应该做的是声明一个用值 true 初始化的 boolean 变量。在循环内,在任何迭代中,如果 if 条件的计算结果为 true,则将该 boolean 变量的值设置为 false 并跳出循环.

循环结束后,检查 boolean 变量的值是否仍然是true。如果是,则字符串是回文,否则不是。

int i = 0;
int j = myString.length() - 1;
boolean isPalindrome = true;

while (i < j) {
    if (myString.charAt(i) != myString.charAt(j)) {
        isPalindrome = false;
        break;
    }

    i++;
    j--;
}
    
if (isPalindrome) {
   System.out.println("Yes");
} else {
   System.out.println("No");
}

关于java - 在 Java 中检查单词是否为回文时如何正确使用 charAt()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64621449/

相关文章:

java - dom4j XPath 无法解析 xhtml 文档

java - 流分组后如何聚合分组实体

java - 在 Java 中使用反斜杠转义空格

java - 该算法不会在 O(m log n) 中运行吗?

java - java中的getRuntime.exec()是否理解*?

java - JVisualVM 和 Java Mission Control 有什么区别?

java - 关键事件不起作用

java - IF_ICMPNE 是什么意思?

java - fragment 按钮不具有交互性

java - java项目和java包的区别