检查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并且在元音之前为第一个辅音制作第一个辅音的子串。

提前致谢。

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

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

(注意,如果找到它, split将删除第一个元音,因此你必须使用word来获取元音,但第一个元素的大小也将是元音的word索引。)

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

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

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

只提取辅音:

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

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

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

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

例如

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

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

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

通过此更改修改游戏function:

 public String getFirstConsonants(String verify) { List 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); } 

这里有一些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)); }