在Java中使用Stack的回文句子

时间:2016-08-20 09:55:34

标签: java stack palindrome

代码的目的是返回忽略标点符号的所有回文并且不区分大小写。 代码可以解决基本的回文,但我相信这是标点问题。

我想知道如何让这段代码返回一个完整的句子回文并且如果除了标点之外什么都没有,它也会返回true,因为它应该显示一个空字符串。

import java.util.*;

public class Palindromes {
    public static boolean isPalindromeSentence(String sentence) {
        Stack <String> p = new Stack<>();
        boolean c;
        for (int i = 0; i < sentence.length(); i++) {
            c = Character.isAlphabetic(sentence.charAt(i));
            char a;
            if (c == true)  {
                a = Character.toLowerCase(sentence.charAt(i));
                p.push (a + "");
            }
            else if (c == false)    {
                i++;
            }
        }
        String reversed = "";
        while (!p.isEmpty())    {
            reversed += p.pop();
        }

        return sentence.equals(reversed);
    }
}

1 个答案:

答案 0 :(得分:0)

在算法之前,清除所有非字母的输入并将其设为小写:

sentence = sentence.toLowerCase().replaceAll("[^a-z]", "");

样式加错误避免提示:永远不要比较if测试中的布尔值,只需按原样使用它,避免冗余else测试。例如,而不是:

if (c == true)  {
    ...
} else if (c == false)  {
    ...
}

if (c) {
    ...
} else {
    ...
}

这不仅更清晰,更清洁,而且避免了任何令人讨厌的意外分配的机会。错误

if (c = true) { // oops! Compiles and executes, but silently assigns