3
import java.util.Scanner;
public class Ex3 {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        System.out.print("Please input a word: ");
        String Line = keyboard.nextLine();
        boolean x = isReverse(Line);
        System.out.print("It is " + x + " that this word is a palindrome.");
    }
    public static boolean isReverse(String Line) {
        int length = Line.length();
        boolean x = true;
        String s = "";
        for (int i = 0; i < length; i++) {
            if (Line.charAt(i) != ' ') {
                s += Line.charAt(i);
            }
        }
        for (int i = 0; i < length; i++) {
            if (Line.charAt(i) != Line.charAt(length - 1 -i)) {
                x = false;
            }
        }
        return x;   
    }
}

私がやろうとしているのは、単語やフレーズを入力として受け取り、回文かどうかに応じてtrueまたはfalseを返すプログラムを作成することです。プログラムでは、空白や句読点を無視して、「男、計画、運河、パナマ」などの回文を作成することになっています。空白の問題は解決したと思いますが、すべての句読点を無視する方法がわかりません。

4

2 に答える 2

8

正規表現を使用して、文字列から単語以外のすべての文字を削除できます。単語\\W以外の文字を表します

String s = "A man, a plan, a canal, Panama.";
String lettersOnly = s.replaceAll("[\\W]", "");
System.out.println("lettersOnly = " + lettersOnly);

出力:

lettersOnly = Amanaplanacanalパナマ

コードの長さを短くしたい場合はStringBuilder#reverse、文字列を逆にするために使用することもできます:

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    System.out.print("Please input a word: ");
    String line = keyboard.nextLine();

    String cleanLine = line.replaceAll("[\\W]", "");
    String reverse = new StringBuilder(cleanLine).reverse().toString();
    boolean isPalindrome = cleanLine.equals(reverse);

    System.out.print("It is " + isPalindrome + " that this word is a palindrome.");
}

編集

ループに固執する必要がある場合は、文字が文字であるかどうかをループで確認できます。

public static boolean isReverse(String Line) {
    int length = Line.length();
    boolean x = true;
    String s = "";
    for (int i = 0; i < length; i++) {
        if ((Line.charAt(i) >= 'a' && Line.charAt(i) <= 'z')
          || (Line.charAt(i) >= 'A' && Line.charAt(i) <= 'Z')) {
            s += Line.charAt(i);
        }
    }

注: 大文字と小文字 ( A!= a) で問題が発生します。簡単な修正は、最初にすべての文字を小文字にすることString lowerCase = Line.toLowerCase();です。

于 2013-01-17T00:24:13.597 に答える
1

Apache Commons LangStringUtilsクラスには、やなど、便利なメソッドがいくつかあります。削除したいすべての句読点文字の文字列とともに文字列を渡すと、句読点のない文字列が返されます。deleteWhitespace()difference()difference()

于 2013-01-17T00:37:26.303 に答える