无法检查字符串是否是回文

时间:2014-10-31 19:51:39

标签: java

我是学习Java的初学者,并且被要求检查给定的字符串是否是回文。

这是我到目前为止所做的:

   int namel = name.length();
    for (int i =0; i<=namel; i++)
    {
      char letter = name.charAt(i);
      char namerev = name.charAt(namel-i);
      String letterS =txtNamePali.getText();
      if(letter==namerev)
      {
         txtNamePali.setText("Palindrone");
      }
      else
      {
          txtNamePali.setText( "Not a Palindrone");
      }
    }

不幸的是我的文本框没有显示任何输出。我已经搜索了如何解决这个问题,但找不到与我在课堂上学到的相关的答案。

我做错了什么,我该如何纠正?

6 个答案:

答案 0 :(得分:4)

我认为最简单的测试是使用StringBuilder.reverse()来构造输入的反向。此外,该单词通常拼写回文

StringBuilder sb = new StringBuilder(name);
sb.reverse();
String msg = (sb.toString().equals(name)) ? "Palindrome" : "Not a Palindrome";
txtNamePali.setText(msg);

答案 1 :(得分:1)

您可以使用StringBuilder

来完成

使用reverse功能。
例如:

public static void main(String args[]){
    String str = "1234";
    String str1 = "1234321";
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append(str);
    if(stringBuilder.reverse().toString().equals(str)){
        System.out.println("Palindrome");
    } else {
        System.out.println("Not Palindrome");
    }
    stringBuilder = new StringBuilder();
    stringBuilder.append(str1);
    if(stringBuilder.reverse().toString().equals(str1)){
        System.out.println("Palindrome");
    } else {
        System.out.println("Not Palindrome");
    }
}

输出:

Not Palindrome
Palindrome

简而言之,你可以做到

new StringBuilder().append(yourString).reverse().toString().equals(yourString)

如果字符串是palindrome,则返回布尔值true,否则返回false。

答案 2 :(得分:0)

您的代码是正确的,但正如有些人所说,您需要考虑一些错误,这些错误应该显示为编译器问题。

int namel = name.length();
boolean isPalindrome = true; 
//add a tracking value, it's a palindrome unless we prove it otherwise
for (int i =0; i< namel/2; i++) 
//change from <= to < because arrays are 0-index, we also only have to check halfway so we can use namel/2
{
    char letter = name.charAt(i);
    char namerev = name.charAt(namel-i);
    //String letterS =txtNamePali.getText(); <-- not sure what this was for, possibly a debug statement
    if(letter!=namerev)
    {
        isPalindrome = false; //we have found a non-matching value, it'll stay false, and we'll output correctly
    }
}

//then we set the text once. Keeping the text inside would have returned an erroneous "abbc" is a palindrome.

if(isPalindrome) {
    txtNamePali.setText("Palindrone");  
}
else {
    txtNamePali.setText( "Not a Palindrone");   
}

答案 3 :(得分:0)

1.检查整个字符串时应该给出方法的结果。所以先放

  if(letter==namerev)
  {
     txtNamePali.setText("Palindrone");
  }
  else
  {
      txtNamePali.setText( "Not a Palindrone");
  }

在循环之外(并改变条件 - 就像我在下面的提议中一样)。 当两个字符的第一个不匹配发生时,你可以打破循环。

2.而不是char namerev = name.charAt(namel-i);你已经减少了一个位置。 所以请使用:char namerev = name.charAt(namel-1-i);

尝试这样的事情:

    String s = "stringtotest";
    boolean result = true;
    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) != s.charAt(s.length()-1-i)) {
            result = false;
            break;
        }
    }
    if (result)
        System.out.println("Palindrom");
    else
        System.out.println("Not palindrom");

答案 4 :(得分:0)

    String name="pop";   // string to check if it palindrome or not
    String revName="";
     int namel = name.length();

     for (int i =1; i<=namel; i++)
        {
          char namerev = name.charAt(namel-i);
         revName += namerev;
        }     

          if(name.equals(revName))
          {
             System.out.println("Palindrome");
          }
          else
          {
              System.out.println( "Not a Palindrome");
          }

答案 5 :(得分:0)

与其他人一样的一般想法,但我认为这更清晰,更容易阅读。只是一个想法 - 每个人都有自己的风格。 :)如果你是初学者,我强烈建议养成将冗余逻辑转移到自己的方法的习惯。它比较干净,以后可能会更有用。

public class Main {

    public static void main( String args[] ) {

        for ( String string : args ) {
            if ( isPalendrome( string ) {
                System.out.println("Palindrome");
            } else {
                System.out.println("Not a Palindrome");
            }
        }

    }

    private static boolean isPalindrome( String string ) {
        return string.equals( reverse( string ) );
    }

    private static String reverse( String original ) {
        return new StringBuilder(original).reverse().toString();
    }

}