使用StringBuilder的回文检查器



我正在尝试创建一个回文检查器。我正在使用StringBuilder,我发现添加空格有点棘手。

编辑:除了使用.reverse((,还有其他方法吗?谢谢你的回答D

当单词没有空格时,此代码有效:

public String palindrome (String anyString) {
StringBuilder sb = new StringBuilder();
for (int i = anyString.length()-1; i>=0; i--) {
        sb.append(anyString.charAt(i));
}
String string2 = sb.toString();
return string2;
}

当输入的单词有空格时;它返回一个字符串,该字符串包含第一个空格之前的字符。

例如:

word = "not a palindrome"
palindrome(word) = "emordnilap"

预期="emordnilap a ton">


我试着插入

if (anyString.charAt(i) != ' ')
    sb.append(anyString.charAt(i));
else 
    sb.append(' ');

在代码的中间,但它不起作用。

谢谢大家!

使用StringBuilder.reverse()方法,它工作得更快(1378行(,更正确

StringBuilder sb = new StringBuilder("not a palindrome");
System.out.println(sb.reverse());

输出:

每吨的内存

public static boolean isPalindromeNaive(String s){
    StringBuilder sb = new StringBuilder(s);
    StringBuilder sbReverse = sb.reverse();
    if (s.equals(String.valueOf(sbReverse))){
        return true;
    }
    return false;
}

这似乎不是你想要的,但这是一个完整的方法,仅供参考。

reverse方法已内置于StringBuilder

public String palindrome (String anyString) {
    StringBuilder sb = new StringBuilder(anyString);
    return sb.reverse().toString();
}

此代码有效:

public boolean isPalindrome(String word){
    return word.equals(new StringBuilder(word).reverse().toString().trim()) ? true : false;
}

这个答案允许您不计算不需要的字符。

public boolean isPalindrome(String s) {
  for (int left = 0, right = s.length()-1; ; left++, right--) {
    while(left < right && !isAcceptableCharacter(s.charAt(left))) {
      left++;
    }
    while(left < right && !isAcceptableCharacter(s.charAt(right))) {
      right++;
    }
    if (left >= right) { return true; }
    if (s.charAt(left) != s.charAt(right)) { return false; }
  }
}
static boolean isAcceptableCharacter(char c) {
  return Character.isLetter(c) || Character.isDigit(c);
}

您应该在lowerCase中的all或在UpperCase中的all中传递参数,或者您还可以编写用于转换String、StringBuffer、StringBuilder的新方法

//删除空格"\t"tabsapce和"\n"newline"\f"的方法。。。

private StringBuilder removeUnwanted(StringBuilder strBuild){
            String str = new String(strBuild);
            str = str.replace("n","").replace("t","").replace("f","").replace(" ","");
            return new StringBuilder(str);
}
public boolean isPal(StringBuilder strBuild){
            int flag = 0;
            strBuild = removeUnwanted(strBuild);
            for(int i = 0;i<strBuild.length()-1;i++){
                    if(strBuild.charAt(i) != strBuild.reverse().charAt(i)){
                            flag = 1;
                            break;
                    }
            }
            if(flag == 0)
                    return true;
            else
                    return false;
}

这是最简单的检查方法。

import java.util.*;
public class Main {
public static void main(String[] args) {
// write your code here
    Scanner s = new Scanner(System.in);
    System.out.println("Enter the string");
    String st1 = s.nextLine();
    String st2 = Palindrome(st1);
    if (isPalindrome(st1,st2)==true)
    {
        System.out.println("palindrome");
    }
    else {
        System.out.println("Not palindrome");
    }
}
private static String Palindrome(String s) {
    StringBuilder stringBuilder = new StringBuilder(s);
    return String.valueOf(stringBuilder.reverse());
}
private static boolean isPalindrome(String s1, String s2){
    if (s1.equals(s2))
    {
        return true;
    }
    else {
        return false;
    }
}
}

如果你只想要一个没有字符串生成器的回文检查器

private static boolean isPalindrome(String input) {
        for (int i = 0, j = input.length() - 1; j >= i; i++, j--) {
            if (input.charAt(i) != input.charAt(j))
                return false;
        }
        return true;
}

但是StringBuilder应该起作用:

private static boolean isPalindrome(StringBuilder input) {
    return input.toString().equals(input.reverse().toString());
}

最新更新