所以-我得到了两个用于在Java中编写程序的代码,该程序计算字符串中音节的数量。这些代码是:


countSyllables(String word)计算单个单词中音节的数量
getTokens(String pattern)将字符串的单词分成字符串列表


现在,我试图使用这两个数字来计算一个字符串的音节数。自爆是我的代码,在最后两行中有错误。您能否确定我获取音节数量的逻辑是正确的?以及如何改进代码以获得所需的结果?

protected int countSyllables1(String doc)
 {

     //lower all the letters in the string

     String inputString = doc.toLowerCase();



     // put all the words of the string into a list of strings

     List<String> WordTokens = getTokens("[a-zA-Z]+");


      //convert the ArrayList to an Array

      String[] WordTokensArr = new String[WordTokens.size()];
      WordTokensArr = WordTokens.toArray(WordTokensArr);

     //Iterate the array
    for(String s: WordTokensArr)
       {

        //count the syllables

         int SyllabCount = WordTokenArr.countSyllables(doc);
        }

     return SyllabCount;

  }


这是我正在使用的帮助程序代码:

protected int countSyllables(String word) {
        String input = word.toLowerCase();
        int i = input.length() - 1;
        int syllables = 0;
        // skip all the e's in the end
        while (i >= 0 && input.charAt(i) == 'e') {
            i--;
            syllables = 1;
        }

        boolean preVowel = false;
        while (i >= 0) {
            if (isVowel(input.charAt(i))) {
                if (!preVowel) {
                   syllables++;
                   preVowel = true;
                }
            } else {
                preVowel = false;
            }
            i--;
        }
            return syllables;
        }

        public boolean isVowel(char ch) {
           if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' || ch == 'y') {
               return true;
           }
           return false;
        }





protected List<String> getTokens(String pattern)
{
    ArrayList<String> tokens = new ArrayList<String>();
    Pattern tokSplitter = Pattern.compile(pattern);
    Matcher m = tokSplitter.matcher(text);

    while (m.find()) {
        tokens.add(m.group());
    }

    return tokens;
}


更新

CountSyllables1方法已修改,现在可以使用。它不能正确检测音节,但绝对可以给出结果。

因此,这就是我所做的更改:
 我将代码移到另一个类,该类从包含CountSyllables和getTokens的类继承而来。我将方法的名称更改为getNumSyllables()。
2.该方法没有参数(字符串doc),我还删除了声明输入字符串的第一行和toLowercase方法,因为该方法已在CountSyllables类中使用。
3.修改了迭代循环,以便声明变量“结果”以帮助计数和返回音节的数量。

public int getNumSyllables()
{

     // put all the words of the string into a list of strings

     List<String> WordTokens = getTokens("[a-zA-Z]+");


      //convert the ArrayList to an Array

      String[] WordTokensArr = new String[WordTokens.size()];
      WordTokensArr = WordTokens.toArray(WordTokensArr);

    //Iterate the array
      int result = 0;
      for(String s: WordTokensArr)
      {

          //count the syllables and add to the result sum
          result += countSyllables(s);
      }

      return result;

  }

最佳答案

方法countSyllables在哪里?它似乎在当前类中(如果我错了,请纠正我),但是您将其称为String[]方法,这是不对的。另外,您需要将每个单词的音节计数加起来,并返回它们的总和。

尝试以此替换循环:

//Iterate the array
int result = 0;
for(String s: WordTokensArr)
{

    //count the syllables and add to the result sum
    result += countSyllables(s);
}

return result;

10-04 11:44