计算包含Y的字符串中的元音(如果其后跟辅音)

时间:2013-10-26 21:55:21

标签: java

我有一个我正在研究的程序,它计算字符串中的元音数量。我有它的工作,但如果Y后面跟一个辅音,我无法计算它。我的VOWEL_GROUP是“AEIOUaeiou”它返回常规常用元音的数量而不是'y'。我看看charAt(i),看看它是否被元音组中的一个字符以外的东西预先取下。 谢谢你的帮助。 以下是显示错误的输入和输出

 OUTPUT to console

 Input
 play. Why! Who!

 There are 3 words in the file.
 There are 2 vowels in the file.
 There are Y 19 vowels in the file.
 There are 3 sentences in the file.


 // START of countThe Y Vowels********************************************
    int  YvowelCount=0;
    for(int i=0;i<myFile.length();i++){
         for(int j=0;j<VOWEL_GROUP.length();j++){
            if(myFile.charAt(i)=='y' && myFile.charAt(i-1)!= VOWEL_GROUP.charAt(j)){
                    YvowelCount++;
            }
       }   
}
// END of countThe Y Vowels**************************************************   

3 个答案:

答案 0 :(得分:1)

首先,您需要将y的检查移出内循环。实际上,根本不需要内部循环。请改用String#contains()

接下来,因为您需要检查y charAt()索引需要i+1之后的字符。出于同样的原因,您不需要检查文件的最后一个字符,因此循环运行直到小于myFile.length() - 1

int  YvowelCount=0;
for (int i=0; i < myFile.length() - 1; i++) {
  if (myFile.charAt(i) == 'y') {
        if (!VOWEL_GROUP.contains(myFile.charAt(i+1) + "")) {
                YvowelCount++;
     }
  }
}

<小时/> 如果您需要检查y之前的字符,请执行以下操作:(循环将从i = 1开始)

int  YvowelCount=0;
for (int i=1; i < myFile.length(); i++) {
  if (myFile.charAt(i) == 'y') {
        if (!VOWEL_GROUP.contains(myFile.charAt(i-1) + "") &&
                   Character.isLetter(myFile.charAt(i-1))) {
            YvowelCount++;
     }
  }
}

请注意,调用Character.isLetter()可以消除错误计数,例如当一个单词以y开头时。

答案 1 :(得分:0)

以下是错误的,你肯定意味着i-1表示另一个索引。你正在做的是在索引i处获得字符,并在第1个字节中获取另一个字符。

myFile.charAt(i)-1

除此之外,请确保仅在i为&gt;时才使用i-1。 0

答案 2 :(得分:0)

int  YvowelCount=0;
for (int i=0; i < myFile.length()-1; i++) {
  if (myFile.charAt(i+1) == 'y') {
        if (!VOWEL_GROUP.contains(myFile.charAt(i) + "")) {
                YvowelCount++;
     }
  }
}

检查一下。