欢迎访问宙启技术站
智能推送

Java中如何检查一个字符串是否是回文串?

发布时间:2023-06-03 11:46:03

回文串(Palindrome)是一个正着读和倒着读都一样的字符串,例如“level”、“madam”、“racecar”等。

在 Java 中,可以使用多种方法来检查一个字符串是否是回文串。下面介绍其中比较常用的几种方法。

方法一:使用 charAt() 方法

该方法的基本思路是将字符串分别从头和尾开始比较,判断每个字符是否相等。

代码如下:

public static boolean isPalindrome(String str) {
    int length = str.length();
    for (int i = 0; i < length/2 ; i++) {
        if (str.charAt(i) != str.charAt(length-i-1)) {
            return false;
        }
    }
    return true;
}

首先,通过 length() 方法获取字符串的长度,然后使用循环语句从头和尾开始分别取出字符,使用 charAt() 方法判断是否相等,如果有一个不相等,则不是回文串,直接返回 false。如果全部字符都比较完毕,说明是回文串,返回 true。

方法二:使用 StringBuilder 类

该方法的基本思路是通过 StringBuilder 类将字符串反转,然后判断反转后的字符串是否与原字符串相等。

代码如下:

public static boolean isPalindrome(String str) {
    String original = str.replaceAll("\\s", "").toLowerCase();
    String reversed = new StringBuilder(str).reverse().toString().replaceAll("\\s", "").toLowerCase();
    return original.equals(reversed);
}

首先,通过 replaceAll() 方法将字符串中的空格去掉,并将所有字符转换为小写。然后,使用 StringBuilder 类将字符串反转,并使用 toString() 方法将 StringBuilder 对象转换为字符串类型。同样去掉字符串中的空格,并将所有字符转换为小写。最后,使用 equals() 方法判断两个字符串是否相等,如果相等,则是回文串,返回 true。

方法三:使用递归

该方法的基本思路是通过递归实现字符串的分割,然后判断分割后的字符串是否相等。

代码如下:

public static boolean isPalindrome(String str) {
    String s = str.replaceAll("\\s", "").toLowerCase();
    if (s.length() == 0 || s.length() == 1) {
        return true;
    } else {
        if (s.charAt(0) == s.charAt(s.length()-1)) {
            return isPalindrome(s.substring(1, s.length()-1));
        } else {
            return false;
        }
    }
}

首先,使用 replaceAll() 方法将字符串中的空格去掉,并将所有字符转换为小写。然后,使用递归的方式对字符串进行分割,首先判断字符串长度是否为 0 或者 1,如果是,则是回文串,返回 true。如果不是,则判断字符串的头和尾字符是否相等,如果相等,则递归判断中间的子串是否是回文串,如果不相等,则不是回文串,返回 false。

总结:

以上三种方法都能够有效地检查一个字符串是否是回文串。 种方法比较简单,但是需要使用循环判断,比较麻烦。第二种方法使用 StringBuilder 类实现,可以直接实现字符串的反转,比较方便。第三种方法使用递归实现,代码精炼,但是不够直观。根据实际的需求和个人的喜好,可以选择合适的方法来实现。