gpt4 book ai didi

java - 计算单词内的音节

转载 作者:行者123 更新时间:2023-12-01 10:45:30 24 4
gpt4 key购买 nike

我正在寻找一种方法来计算单词内的音节数。在我的项目中定义为一组连续的元音但不是单词末尾的“e”的音节。因此,根据这个定义,单词“obvious”只有 2 个音节,而字符串“obstinanceeeeeee”有 3 个音节。我的尝试是:

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

// This counts the number of consonants within a word
int j = 0;
int consonants = 0;
while (j < input.length()) {
if (!isVowel(input.charAt(j))) {
consonants++;
}
j++;
}

// This will return syllables = 1 if the string is all consonants except for 1 e at the end.
if (consonants == input.length() - 1 && numOfE == 1) {
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 int countSyllables(String word) {
String input = word.toLowerCase();
int i = input.length() - 1;
// skip all the e's in the end
while (i >= 0 && input.charAt(i) == 'e') {
i--;
}
int syllables = 0;
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;
}

我希望这有帮助。您可以从字符串末尾开始迭代,并在处理/计算音节之前忽略所有 e。
对原始答案进行编辑。现在,如果单词末尾只有一个 e,则将其计为音节

 protected int countSyllables(String word) {
String input = word.toLowerCase();
int syllables = 0,numOfEInTheEnd=0;

int i = input.length() - 1;
// count all the e's in the end
while (i >= 0 && input.charAt(i) == 'e') {
i--;
numOfEInTheEnd++;
}

if (numOfEInTheEnd == 1) {
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;
}

现在不是跳过所有尾随的 e,而是对其进行计数。如果尾随 e 等于 1,则音节设置为 1。现在就可以使用。

关于java - 计算单词内的音节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34209176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com