Java - 编写一个基于规范的音节计数器

标签 java string methods

一个音节的规范:

每组相邻元音(a、e、i、o、u、y)算作一个音节(例如,“real”中的“ea”贡献一个音节,但“e...a”在“regal”中算作两个音节)。但是,单词末尾的“e”不算作音节。此外,每个单词至少有一个音节,即使之前的规则给出的计数为零。

我的 countSyllables 方法:

public int countSyllables(String word) {
    int count = 0;
    word = word.toLowerCase();
    for (int i = 0; i < word.length(); i++) {
        if (word.charAt(i) == '\"' || word.charAt(i) == '\'' || word.charAt(i) == '-' || word.charAt(i) == ',' || word.charAt(i) == ')' || word.charAt(i) == '(') {
            word = word.substring(0,i)+word.substring(i+1, word.length());
        }
    }
    boolean isPrevVowel = false;
    for (int j = 0; j < word.length(); j++) {
        if (word.contains("a") || word.contains("e") || word.contains("i") || word.contains("o") || word.contains("u")) {
            if (isVowel(word.charAt(j)) && !((word.charAt(j) == 'e') && (j == word.length()-1))) {
                if (isPrevVowel == false) {
                    count++;
                    isPrevVowel = true;
                }
            } else {
                isPrevVowel = false;
            }
        } else {
            count++;
            break;
        }
    }
    return count;
}

确定字母是否为元音的 isVowel 方法:

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

根据一位同事的说法,这在 this text 上使用时应产生 528 个音节,但我似乎可以得到它等于,我不知道我们谁是正确的。请帮助我将我的方法开发成正确的算法或帮助证明这是正确的。谢谢。

最佳答案

其中一个问题可能是您在输入上调用了 lover case 方法,但没有分配它。

所以如果你改变

 word.toLowerCase();

word =  word.toLowerCase();

肯定会有帮助。

关于Java - 编写一个基于规范的音节计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9154027/

相关文章:

java - 碲中的 Portlet 支持

java - 如何在 java/android 中重复执行任务?

java - 从任意 url 动态加载 jar

Java定时器&绘图组件问题

java - 如何正确为带有转义字符的 String.matches() 创建正则表达式?

javascript - 如何防止子字符串结束父字符串?

Java - 监听器/观察者 VS 子类保护方法

python - 方法类似于函数中的参数

java - 如何使unicode从java中的方法返回类型打印

java - 通过方法暴露的 Servlet 静态字段——需要数据完整性