移动逻辑以确定字符串是否是回文

时间:2015-10-01 02:48:02

标签: java palindrome

目前令人难以置信的困惑我将如何将用于确定字符串是一个回文的逻辑从main方法转移到名为checkPalindrome的方法中?我的方法应该有一个String参数并返回一个布尔值,但我仍然不确定如何执行此操作。

import java.util.Scanner;

public class PalindromeCheckMethod {

public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a String: ");
        String s = input.nextLine();
        boolean isPalindrome = checkPalindrome(s);
        String msg = "not a palindrome";
        if (isPalindrome) {
            msg = "a palindrome";
        }
        System.out.printf("%s is %s.%n", s, msg);

        s = s.toLowerCase();
        String resultString = "";

        for (int i = 0; i < s.length(); i++) {
            if (Character.isLetter(s.charAt(i)))
                resultString += s.charAt(i);
        }
        s = resultString;

        int low = 0;
        int high = s.length() - 1;

        if (high >= 0)  {


        while (low < high) {
            if (s.charAt(low) != s.charAt(high)) {
                isPalindrome = false;
                break;
            }
                low++;
                high--;
            }
        }
        else {
            isPalindrome = false;
        }

        if (isPalindrome)
            System.out.println(s + " is a palindrome. ");
        else 
            System.out.println(s + " is not a palindrome. ");


        }

private static boolean checkPalindrome(String s) {
    return false;
}

    }

3 个答案:

答案 0 :(得分:1)

static boolean checkPalindrome(String str) 
{
   int strEndPoint=str.length()-1;
   int strStartPoint=0;
   boolean isPalindrome=true;
   while(strStartPoint<=strEndPoint)
   {
       if(str.charAt(strStartPoint)!=str.charAt(strEndPoint))
       {
          isPalindrome=false;
          break;
       }
     strStartPoint++;
     strEndPoint--;
  }
 return isPalindrome;

}

答案 1 :(得分:0)

好吧,我会使用StringBuilder并使用类似

的方法实现该描述的方法
static boolean checkPalindrome(final String s) {
    StringBuilder sb = new StringBuilder(s);
    sb.reverse();
    return sb.toString().equalsIgnoreCase(s);
}

但是你当然可以用你的实现替换我的实现(我没有验证你的实现)。要调用该方法(并且可能利用格式化的io),您可以使用类似

的方法
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter a String: ");
    String s = input.nextLine();
    boolean isPalindrome = checkPalindrome(s);
    String msg = "not a palindrome";
    if (isPalindrome) {
        msg = "a palindrome";
    }
    System.out.printf("%s is %s.%n", s, msg);
}

答案 2 :(得分:0)

为什么你不认为简单。准确地说,字符的镜像是相同的,如果不是,它不是回文。当您穿过阵列的中间而没有找到差异时,它是绝对的回文。看看这个。

int len = str.getLenght();
int i = 0;

do {
    if (str.get(i) == str.get(len-1-i))
        i++;
    else {
        print("NOT a palindrome");
        break;
    }

} while (i < len-1-i) ;

if (i < len-1-i)  print("NOT a palindrome");