检查java中的字符串中是否有辅音

时间:2013-07-03 05:37:13

标签: java

所以我正在编写一个名为pig latin的游戏程序(您可以查看维基百科的规则,但它可以将第一个辅音移到后面并添加-ay)。我需要在单词的开头检查单词是否有任何辅音。如果它有一个或多个consant,它需要从第一个辅音开始,到元音前的最后一个辅音结束。

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];
    }
}

以下是一个例子:

“手套”这个词应该变得过分了。我的节目输出'lovegay'。

以下是我的计划(减去importsGUI内容):

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();
    }
}

所以我的问题是天气可以看到一个String是否包含consonats并且在元音之前为第一个辅音制作第一个辅音的子串。

提前致谢。

5 个答案:

答案 0 :(得分:3)

你正在咆哮错误的树...使用正则表达式:

将所有辅音提取到第一个元音:

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

只提取辅音:

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

或者如果你真的需要知道文本是否都是辅音:

boolean isAllConsonants = str.matches("[^aeiouAEIOU]+");

答案 1 :(得分:1)

可能做你想做的事情的一种方式有点吸引人:

假设您正在将word变成猪拉丁语,那么使用word.split("[aeiouAEIOU]", 2)呢?查看split的文档,它只与正则表达式匹配一次,因此返回的字符串数组将围绕单词中的第一个元音分开。然后,您可以根据第一个元音是第一个字符,最后一个字符,介于两者之间,还是无处可寻,将这些部分放回正确的顺序(请记住,并非所有单词都包含这五个元音中的一个)。

(请注意split如果找到它会移除第一个元音,所以你必须使用word来获取元音,但第一个元素的大小也是元音的索引为word。)

答案 2 :(得分:0)

而不是写大,有一个布尔函数,可以检查char是元音

例如

public static boolean isVowel(final char ch) {
return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u';

}

检查每个角色,然后您可以轻松编码。

答案 3 :(得分:0)

在这里,我删除了你的isConsonant函数并创建了一个新函数来获取只包含常量的String的第一部分。

通过此更改修改游戏功能:

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);
}

答案 4 :(得分: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));
}