【问题标题】:Palindrome Checker using StringBuilder使用 StringBuilder 的回文检查器
【发布时间】:2013-03-06 14:20:39
【问题描述】:

我正在尝试创建一个回文检查器。我正在使用 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(' ');

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

谢谢大家!

【问题讨论】:

  • 你确定你的代码不起作用吗?它对我来说工作正常。 :D
  • 请描述您对“回文检查器”的期望。它是否应该验证给定的字符串是否是回文?或者如果它包含空格分隔的回文?还是应该像您在上面尝试的那样生成字符串的回文?在后一种情况下,为什么将其称为“检查器”?

标签: java stringbuilder palindrome


【解决方案1】:

改用StringBuilder.reverse() 方法,它可以工作faster (1378 line) 并且更正确

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

输出:

emordnilap 一吨

【讨论】:

    【解决方案2】:
    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;
    }
    

    似乎不是你要找的,但它是完整的方法,仅供参考。

    【讨论】:

      【解决方案3】:

      reverse 方法已经内置在 StringBuilder

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

      【讨论】:

        【解决方案4】:

        这个答案可以让你不计算你不想要的字符。

        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);
        }
        

        【讨论】:

          【解决方案5】:

          此代码有效:

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

          【讨论】:

            【解决方案6】:

            您应该以全部小写或全部以大写形式传递参数,或者您还可以编写新方法来转换String、StringBuffer、StringBuilder

            //删除空格“\t”制表符和“\n”换行符“\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;
            }
            

            【讨论】:

              【解决方案7】:

              这是最简单的检查方法。

              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;
                  }
              }
              }
              

              【讨论】:

                【解决方案8】:

                如果你只想要一个没有 String Builder 的回文检查器

                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());
                }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2014-12-23
                  • 2022-11-10
                  • 2015-04-17
                  • 2013-09-20
                  • 2012-03-30
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多