有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java回文不是wokring

import java.util.*;

public class FindingPalindrome {

    private String inputString;
    private Stack<Character> stack = new Stack<Character>();

    public FindingPalindrome(String str)
    {
        inputString = str;
        fillStack();
    }

    public void fillStack()
    {
        for(int i = 0; i < inputString.length(); i++)
        {
            stack.push(inputString.charAt(i));
        }
    }

    public String reverseString()
    {
        String result = new String();
        while(!stack.isEmpty())
        {
            result = result.concat(Character.toString(stack.pop()));
        }

        return result;
    }

    public boolean isPalindrome()
    {
        if(inputString.equalsIgnoreCase(reverseString()))
                return true;

                else return false;
    }
}




public class TestPalindrome {

    public static void main(String args[])
    {

        String inputString  ="Straw? No, too stupid a fad. I put soot on warts";

        String inputString1 = inputString.toLowerCase().replaceAll("[^a-z]","");
        FindingPalindrome p = new FindingPalindrome(inputString );

        if(p.isPalindrome())System.out.println("Is palindrome!");
        else System.out.println("Is not palindrome!");
    }

}

上面是按堆栈测试回文的代码。一切正常,但回文输出不正确


共 (3) 个答案

  1. # 1 楼答案

    如果您关心的只是回文检查,那么这里有一个简洁的实现:

    public class Palindrome {
    public static void main(String[] args) {
        String input = "Some String";
        String reverse = new StringBuilder(input).reverse().toString();
    
        if (reverse.equals(input))
            System.out.println("String is strictly Palindrome.");
    
        else if (reverse.equalsIgnoreCase(input))
            System.out.println("String is Palindrome.");
    
        else
            System.out.println("String is not Palindrome.");
    }
    }
    
  2. # 2 楼答案

    你没有把问题说清楚。您是否需要使用堆栈来执行此操作?除此之外,它非常简单(我不知道如何阅读您当前的算法):

    public static boolean isPalindrome(String s) {
    
        StringBuffer reverseString = new StringBuffer();
    
        // reverse the string
        for (int i = s.length() - 1; i > -1; i ) {
            reverseString.append(s.charAt(i));
        }
        return reverseString.toString().equals(s);
    }
    

    您的输入将是:

    import java.lang.StringBuffer;
    

    我意识到这个答案对你没有帮助,如果你想保持你目前的算法,但我想我应该提供这样的东西无论如何


    需要特别注意的是:StringBuffer类有^{},它反转字符序列。在这种情况下,您可以使用此选项代替上述选项:

    public static boolean isPalindrome(String s) {
        return new StringBuffer(s).reverse().toString().equals(s);
    }
    
  3. # 3 楼答案

    您正在用inputString构造FindingPalindrome对象,而您应该用inputString1来构造它:

    FindingPalindrome p = new FindingPalindrome(inputString1 );