2013-07-03 22 views
1

所以我正在編寫一個叫拉丁文的遊戲程序(你可以查看維基百科的規則,但是考慮到第一個輔音並將它們移動到後面的詞和添加 - - )。我需要檢查單詞開頭是否有輔音。如果它有一個或多個consant,那麼它需要從第一個輔音開始,到最後一個輔音的元音字母開始。檢查在java中是否有輔音字符串

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

下面是一個例子:

這個詞 '手套' 應該成爲oveglay。我的節目輸出'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(); 
    } 
} 

所以我的問題是天氣,可以看到,如果一個字符串包含consonats,並第一個輔音的子串的第一個輔音在元音之前。

在此先感謝。

+1

學院分配? :) – Optional

+8

所有的GUI東西似乎與問題無關。嘗試編寫一個[簡短,自包含的示例](http://sscce.org/),人們將更有可能閱讀它並幫助你,如果他們不需要弄清楚你的代碼的哪一部分涉及到問題。 – Carsten

+0

我真的不明白爲什麼人們用新的換行符填充他們的代碼。爲什麼不保持小而簡單? :P – Goatcat

回答

1

的一種方式,你想要的東西就是有點耐人尋味:

假設你正在轉向word成豬拉丁文,請使用word.split("[aeiouAEIOU]", 2)?查看split的文檔,它將只匹配一次正則表達式,所以返回的字符串數組將圍繞單詞中的第一個元音分開。然後,您可以根據第一個元音是第一個字符,最後一個字符,之間的某個位置,還是無處找到(請記住,並非所有單詞都包含這五個元音之一),將這些作品按照正確的順序重新排列。

(請注意,如果它發現它split將刪除第一個元音,所以你必須使用word得到那個元音回來,但是第一塊的大小也將是元音的索引word。)

+0

+1這對我非常有幫助!我會在問題中發佈我的解決方案。 – DLJ

0

而不是寫大的,有一個布爾函數,將檢查該字符是元音

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

} 

檢查每一個字符,然後你可以很容易地編寫出來。

+0

只要你能保證沒有特殊字符(例如破折號),這將工作 –

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

你找錯了樹...使用正則表達式:

提取所有輔音到第一個元音:

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

只提取輔音:

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

,或者如果你真的需要知道,如果文本是所有輔音:一種可能做

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

我不理解這些陳述。 – DLJ

+1

您可以閱讀'String.replaceAll()'的javadoc,但本質上它使用正則表達式來查找和替換。在這裏,我用它來刪除(用空白替換)所有元音字符。 'matches()'方法也使用正則表達式 - 在這裏我用它來斷言整個字符串只包含非元音字符。關於正則表達式的教程超出了本論壇的範圍,但我鼓勵你學習它 - 這是一個強大的武器。 – Bohemian

+0

我不完全明白這可能會有幫助。我並不是說你的awnser是無用的,因爲它幫助解決了另一個問題,但我怎麼能在那之後使用它呢?我需要所有的輔音直到第一個元音。有沒有辦法找到第一個元音的位置?謝謝 – DLJ

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

似乎缺少這部分內容:「在元音之前創建輔音的第一個輔音的子串」。 – Barett

相關問題