2

だから私は豚ラテンと呼ばれるゲームであるプログラムを書いています(ルールについてはウィキペディアを確認できますが、最初の子音を単語の後ろに移動して-ayを追加することで構成されています)。単語の先頭に子音が含まれていることを確認する必要があります。1 つ以上の子音がある場合は、最初の子音で始まり、母音の前の最後の子音で終わる部分文字列を取得する必要があります。

public void isConsonant(String word){
    char[] consonants = {'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm'
            , 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'z' };
    char[] StringArray = word.toCharArray();
    for(int dex = 0; dex < StringArray.length; dex++ ){
        char current = StringArray[dex];
    }
}

次に例を示します。

'glove' という単語は oveglay になるはずです。私のプログラムは「lovegay」を出力します。

これが私のプログラムです(マイナスimportsなどGUI):

public class PigLatin extends JFrame implements ActionListener {
    JTextField word = new JTextField(25);
    JButton GO = new JButton("Go");
    JLabel output = new JLabel();
    String CharNum1;
    String CharNum2;

    //The frame setup should be here

    public void isConsonant(String verify) {
        char[] consonants = { 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm',
                'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'z' };
        char[] StringArray = verify.toCharArray();
        for (int dex = 0; dex < StringArray.length; dex++) {
            char current = StringArray[dex];
        }
    }

    public void game() {
        // The actual word
        String word2 = word.getText();

        // The first character
        CharNum1 = word2.substring(0, 2);
        CharNum2 = word2.substring(1, word2.length());

        // Remove the first char
        // String RevampedWord = word2.replace(CharNum1, "");
        String finalWord = CharNum2 + "-" + CharNum1 + "ay";
        output.setText(finalWord);
    }

    public void actionPerformed(ActionEvent event) {
        game();
    }

    public static void main(String[] arguments) {
        PigLatin pig = new PigLatin();
    }
}

だから私の質問は、文字列に子音が含まれているかどうかを確認し、最初の子音から母音の前の最初の子音への部分文字列を作成できる天気です。

前もって感謝します。

4

5 に答える 5

3

あなたは間違ったツリーを吠えています...正規表現を使用してください:

最初の母音までのすべての子音を抽出するには:

String initialConsonants = str.replaceAll("([^aeiouAEIOU]*).*", "$1");

子音だけを抽出するには:

String onlyConsonants = str.replaceAll("[aeiouAEIOU]", "");

または、テキストがすべて子音かどうかを本当に知る必要がある場合:

boolean isAllConsonants = str.matches("[^aeiouAEIOU]+");
于 2013-07-03T07:00:48.643 に答える
1

あなたが望むことを行う可能性のある1つの方法は、少し興味深いものです:

あなたがword豚のラテン語に変わっていると仮定すると、 を使用するのはword.split("[aeiouAEIOU]", 2)どうですか? のドキュメントを見るとsplit、正規表現に 1 回だけ一致するため、返される文字列の配列は単語の最初の母音で分割されます。次に、最初の母音が最初の文字、最後の文字、その中間、またはどこにも見つからないかどうかに基づいて、これらの断片を正しい順序に戻すことができます (すべての単語にこれら 5 つの母音のいずれかが含まれているわけではないことに注意してください)。

(split最初の母音が見つかった場合は削除されることに注意してください。したがってword、その母音を取り戻すために を使用する必要がありますが、最初の部分のサイズは、その母音の へのインデックスにもなりますword。)

于 2013-07-03T15:14:13.550 に答える
0

これで、関数を消去isConsonantし、新しい関数を作成して、定数のみを含む文字列の最初の部分を取得しました。

この変更により、ゲーム機能が変更されます。

public String getFirstConsonants(String verify) {
    List<Character> vowels = Arrays.asList('a', 'e', 'i', 'o', 'u'); // better finding vowels (faster)

    String firstString = "";
    for (int i = 0; i < verify.length(); i++) {
        if (!vowels.contains(verify.charAt(i)))
            firstString += verify.charAt(i); // we found a constant
        else
            break; // we found a vowel, we have already our string
        }

    return firstString;
}

public void game() {
    // The actual word
    String word2 = word.getText();

    // Lets find the first consonants
    String firstString = getFirstConsonants(word2);

    String finalWord = word2.substring(firstString.length()) + "-" + firstString + "ay";
    output.setText(finalWord);
}
于 2013-07-03T05:52:12.420 に答える
0

以下は、特定の文字が子音か母音かを検出する 1 行のルーチンです。

private static boolean isVowel(char c) {
    return "aeiouAEIOU".contains(String.valueOf(c));
}

private static boolean isConsonant(char c) {
    return "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ".contains(String.valueOf(c));
}
于 2015-08-11T13:26:37.573 に答える