2

スレッド内の句読点とスペースを無視しなければならないところまでプログラムを作成しましたが、そのコーディングを手伝ってくれる人がいるかどうか疑問に思っていましたか? 私が試してきたことはうまくいかないようです。これが私がこれまでに持っているものです:

import java.util.Scanner;

public class PalindromeTester
{
public static void main (String[] args)

{

    String str, another = "y";

    int left, right;

    char charLeft, charRight;


    Scanner scan = new Scanner (System.in);


    while (another.equalsIgnoreCase("y")) // allows y or Y

    {

        System.out.println ("Enter a potential palindrome: ");

        str = scan.nextLine();

        left = 0;

        right = str.length() - 1;


        while (left < right)
        {
            charLeft = str.charAt(left);
            charRight = str.charAt(right);


            if (charLeft == charRight)
            {
                left++;
                right--;
            }

            else if (charLeft == ',' || charLeft == '.' ||
 charLeft == '-' || charLeft == ':' ||
 charLeft == ';' || charLeft == ' ')

                left++;

            else if (charRight == ',' || charRight == '.' ||
 charRight == '-' || charRight == ':' ||
 charRight == ';' || charRight == ' ')
                right--;
            else

                break;

        }

    System.out.println();


        if (left < right)
            System.out.println ("That string is NOT a palindrome.");
                        else

            System.out.println ("That string IS a palindrome.");


        System.out.println();

    System.out.print ("Test another palindrome (y/n)? ");

    another = scan.nextLine();
    }

 }

}
4

7 に答える 7

9

Jim Garrison の発言を明確にするために、必要な正規表現は次のとおりです。

String m = "Madam, I'm'',.,.''   Adam";
m = m.toLowerCase().replaceAll("\\W", "");

これにより、文字と数字のみが残り、空白と句読点が削除されます。つまり、m は「madamimadam」になり、その文字列に対して通常の回文テストを実行できます。

正規表現の詳細については、こちらをご覧ください

于 2009-10-14T03:42:12.000 に答える
5

単語が回文かどうかを判断するためのこのコードは、はるかに単純化できます。更新されたコードを見つける

String word;
int z;
int y = 0;
int i = 0;

char letter;

Scanner input = new Scanner(System.in);

System.out.print("Enter a word: ");
word = input.nextLine();

word = word.replaceAll("\\s+", "");
word = word.toLowerCase();

z = word.length()-1;
while (i <= z){

    if ((letter = word.charAt(i)) == (letter = word.charAt(z-i))){
        y += 1;
    }
    i += 1;
}

if (y == (z+1)){
    System.out.println("The word IS a palindrome");
}
else{
    System.out.println("The word is NOT a palindrome");
}

}
}
于 2012-10-19T16:33:27.273 に答える
4

開始する前にすべてのスペースと句読点を削除することで、コードを大幅に簡素化できます。String.replaceAll(regex,replacement) を見てください。空白と句読点に一致する正規表現を記述し、代わりに空の文字列 ("") を指定します。これにより、元の文字から無視する文字を除いた新しい文字列が返されます。

于 2009-10-14T00:12:03.907 に答える
3

これは、私が生徒に割り当てるJavaソフトウェアソリューション(PP3.11)からのプログラミング割り当てです。皮肉なことに、教師のソリューションはCharacter.isLetterOrDigit(___)スペースと句読点を取り除くために(本では決して言及されていない)メソッドを使用し(本のその時点ではメソッドを教えていません)、charはAPCSサブセットの公式部分ではありません。愚かな出版社。

于 2011-11-09T14:23:02.487 に答える
2

あなたの問題:あなたは文字の大文字小文字を無視していません。ですから、Able was Iを試してみると、エルバを見た場合、それは本当の回文ですが、正しく戻らないでしょう。

于 2011-03-14T18:36:36.467 に答える
2

char のドキュメント エントリを見てください。具体的にはisLetterOrDigit方法。そのメソッドが false を返す場合、それは句読点またはスペースです。それを助けることができる他の方法もあります。

于 2009-10-14T00:17:38.220 に答える