0

そこで、以前のスレッドJavaで、文字列が回文であるかどうかを確認するように依頼しました。回文の文字列の読み取りについて大文字と小文字を区別しません。

たくさんの素晴らしいフィードバックを受け取り、宿題をしました(たくさん学びました!)が、それはラボの割り当て(大学)だったので、提案された方法(文字列ビルダー)を使用できませんでした。次のコード(少なくともアウトライン)は、この割り当てのためにコード化するために私が「想定」している方法であるため、これはメソッドに関する質問ではありません。

import java.util.*;

public class Lab04 {

public static void main(String[] args) {
    // declaring variables
    String sentence;
    String word;

    // initiating the scanner
    Scanner keyboard = new Scanner(System.in);

    // prompting the user for a sentence

    System.out.println("Please enter the sentence: ");
    sentence = keyboard.nextLine();
    System.out.println("Your input was: " + '"' + sentence + '"');

    // checking if it is a palindrome
    sentence = sentence.toLowerCase();
    Scanner stringScan = new Scanner(sentence);
    **stringScan.useDelimiter("[ \t\n,.-:;'?!\"] + ");**
    char leftChar, rightChar;
    boolean isPalindrome = true;

    while ( stringScan.hasNext() ) {
        word = stringScan.next();
        leftChar = word.charAt(0);
        rightChar = word.charAt(word.length() - 1);
        if (!(leftChar == rightChar))
            isPalindrome = false;   
    }

    if (isPalindrome)
        System.out.println("This is a palindrome.");
    else 
        System.out.println("This is not a palindrome.");


    // checking if it is an alliteration
    sentence = sentence.toLowerCase();
    Scanner stringScan1 = new Scanner(sentence);

    **stringScan1.useDelimiter("[ \t\n,.-:;'?!\"]+");**

    char firstChar = sentence.charAt(0);
    boolean isAlliteration = true;
    while ( stringScan1.hasNext() ) {
        word = stringScan1.next();
        if (firstChar != word.charAt(0) && word.length() > 3)
            isAlliteration = false;
    }

    if (isAlliteration)
        System.out.println("This is an alliteration.");
    else 
        System.out.println("This is not an alliteration.");
}
}

気になる部分は太字で書かれています。私はグーグルでJavaドキュメントを使おうとしていますが、区切り文字の形式がどのように機能しているかを知るのに苦労しています。

現在の区切り文字はおそらく乱雑で、不要な文字が含まれています。

私の目標は、区切り文字が最後の句読点を無視するようにすることです。すでにほぼ完璧に機能していますが、最後の句読点を無視する方法を見つける必要があります。

例:

入力:

Doc, note, I dissent. A fast never prevents a fatness. I diet on cod

出力:

Your input was: "Doc, note, I dissent. A fast never prevents a fatness. I diet on cod"
This is a palindrome.

入力:

Doc, note, I dissent. A fast never prevents a fatness. I diet on cod.

出力:

Your input was: "Doc, note, I dissent. A fast never prevents a fatness. I diet on cod"
This is not a palindrome.

残りのコードについて:

私はいくつかの異なることを試みてきたので、sentence.toLowerCaseを使用する必要がなく、おそらく1つのスキャナー(?)を使用できるような「余分な」コードがいくつかありますが、修正があったかどうかを確認したかっただけです句読点の問題は、残りの部分は私が自分で理解できる詳細にすぎないと感じているためです。

前もって感謝します!

4

1 に答える 1

1

コードが全体的に正しいことを行っているかどうかはわかりませんが、入力文字列から句読点を削除することについて質問する場合は、非常に簡単です。

String lowerCaseInput = input.toLowerCase();
String strippedInput = lowerCaseInput.replaceAll("[^a-z]", "");

小文字に変換した後、replaceAll()はすべての小文字以外の文字を削除します。

訂正してくれたPatashuに感謝します。

于 2013-03-19T03:57:09.597 に答える