5

回文チェッカーを作成しようとしています。私は 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"

expected = "emodnilap a ton"


入れてみました

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

コードの途中にありますが、機能しません。

みんなありがとう!

4

8 に答える 8

8

StringBuilder.reverse()代わりにメソッドを使用してください。より速く(1378行)、より正確に動作ます

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

出力:

エモドニラップ・ア・トン

于 2013-03-06T14:22:21.863 に答える
3
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;
}

あなたが探しているものではないようですが、参照用の完全な方法です。

于 2016-05-26T01:24:38.933 に答える
3

reverseメソッドはすでに組み込まれていますStringBuilder

public String palindrome (String anyString) {
    StringBuilder sb = new StringBuilder(anyString);
    return sb.reverse().toString();
}
于 2013-03-06T14:23:21.663 に答える
0

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());
}
于 2021-07-04T03:52:39.730 に答える
0

引数はすべて小文字で渡すか、すべて大文字で渡す必要があります。または、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;
}
于 2017-07-14T16:36:59.640 に答える
0

これが最も簡単なチェック方法です。

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;
    }
}
}
于 2018-03-19T16:13:34.997 に答える