所以-我得到了两个用于在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;