ZetCode

Java 回文

最后修改日期:2024 年 7 月 10 日

在本文中,我们将展示如何在 Java 中创建一个函数来识别回文。

回文是指正序(从左向右)和倒序(从右向左)读都一样的单词、数字、短语或其他字符序列,例如 madam 或 racecar。

在本文中,我们将展示几种在 Java 中检查字符串是否为回文的方法。

Java 回文与 StringBuilder

StringBuilderreverse 方法会将此字符序列替换为该序列的反转。

Main.java
void main() {

    System.out.println(isPalindrome("radar"));
    System.out.println(isPalindrome("kayak"));
    System.out.println(isPalindrome("forest"));
}

boolean isPalindrome(String original) {

    String reversed = new StringBuilder(original).reverse().toString();
    return original.equals(reversed);
}

在此示例中,我们将原始字符串传递给 StringBuilder 并将其反转。然后,我们将反转后的字符串与原始字符串使用 equals 进行比较。

Java 回文与 for 循环和 charAt

StringcharAt 方法返回指定索引处的 char 值。索引范围从 0 到 length() - 1

Main.java
void main() {

    System.out.println(isPalindrome("radar"));
    System.out.println(isPalindrome("kayak"));
    System.out.println(isPalindrome("forest"));
}

boolean isPalindrome(String original) {

    String reversed = "";

    int len = original.length();
    for (int i = len - 1; i >= 0; i--) {
        
        reversed = reversed + original.charAt(i);
    }

    return original.equals(reversed);
}

在此示例中,我们使用一个从原始字符串末尾开始的 for 循环来构建反转的字符串。我们使用 charAt 获取当前字符。

int len = original.length();

我们使用 length 获取原始字符串中的字符数。

for (int i = len - 1; i >= 0; i--) {
        
    reversed = reversed + original.charAt(i);
}

我们通过使用 charAt 从原始字符串的末尾获取字符来构建反转的字符串。

使用 toCharArray 方法

StringtoCharArray 将字符串转换为新的字符数组。

Main.java
void main() {

    System.out.println(isPalindrome("radar"));
    System.out.println(isPalindrome("kayak"));
    System.out.println(isPalindrome("forest"));
}

boolean isPalindrome(String original) {

    char[] data = original.toCharArray();

    int i = 0;
    int j = data.length - 1;

    while (j > i) {

        if (data[i] != data[j]) {
            return false;
        }

        ++i;
        --j;
    }
    
    return true;
}

在此示例中,我们将原始字符串转换为字符数组。在一个 while 循环中,我们开始比较字符串两侧的字符;从最左边的字符和最右边的字符开始。我们一直到字符串的中间。

使用 Stack

Stack 是一种后进先出 (LIFO) 的集合。

Main.java
import java.util.Stack;

void main() {

    System.out.println(isPalindrome("radar"));
    System.out.println(isPalindrome("kayak"));
    System.out.println(isPalindrome("forest"));
}

boolean isPalindrome(String original) {

    char[] data = original.toCharArray();

    Stack<Character> stack = new Stack<>();
    for (char c: data) {

        stack.push(c);
    }

    char[] data2 = new char[data.length];

    int len = stack.size();

    for (int i = 0; i < len; i++) {

        data2[i] = stack.pop();
    }

    var reversed = new String(data2);
    
    return original.equals(reversed);
}

该示例使用 Java Stack 容器来构建反转的字符串。

char[] data = original.toCharArray();

首先,我们使用 toCharArray 将字符串转换为字符数组。

Stack<Character> stack = new Stack<>();

for (char c: data) {

    stack.push(c);
}

在第二步中,我们将字符推入堆栈。

char[] data2 = new char[data.length];

此数组将保存反转的字符。

for (int i = 0; i < len; i++) {

    data2[i] = stack.pop();
}

现在,我们通过从堆栈中弹出字符来获得反转的字符串。

var reversed = new String(data2);
    
return original.equals(reversed);

我们从数组创建反转的字符串,并使用 equals 将其与原始字符串进行比较。

来源

回文

在本文中,我们已经检查了一个字符串是否是回文。我们创建了各种算法来检查回文。

作者

我的名字是 Jan Bodnar,我是一位充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。到目前为止,我已经撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出所有Java教程