
[英]String indexOf method is not working for first character in the String
[英]isVowel() method with a character in a String
我有一个包含一堆单词的文本文件。 我的程序的一部分应该根据用户输入扫描此列表并将包含所需元音数量的单词插入到输出文件中。 我有一个isVowel
方法,它返回一个boolean
,但它似乎不起作用——输出只是一个空列表。
这是方法:
public boolean isVowel(char c)
{
if(c=='a' || c=='A' || c=='e' || c=='E' || c=='i' || c=='I' || c=='o' || c=='O' || c=='u' || c=='U')
{
return true;
}
else
{
return false;
}
}
}
这是使用它的程序部分:
public ArrayList<String> vowelHeavy(int n, int m)
{
int vowels = 0;
while(input.hasNextLine())
{
word = input.nextLine();
if (word.length() == n)
{
for(int i = 0; i < word.length(); i++)
{
if(isVowel(word.charAt(i)) == true)
{
vowels++;
}
}
if (vowels == m)
{
output.add(word);
}
}
word = input.nextLine();
}
return output;
}
您最大的问题是您在测试新单词时没有重置vowels
计数变量。 该值只是不断累积文件中的元音总数。
更改:
int vowels = 0;
while(input.hasNextLine()) {
...
至:
while(input.hasNextLine()) {
int vowels = 0;
...
isVowel()
,您的大多数代码(包括isVowel()
方法)都可以用一行删除:
int vowels = word.replaceAll("[^aeiouAEIOU]", "").length();
这是通过从单词中消除所有不是元音的字符来实现的; 剩下的就是元音,所以只要花点时间就可以算数了。
有一种更简单的方法来编写此代码:
public boolean isVowel(char c){
return(your boolean tests);
}
2件事:
word.length() == n
test永远不会为真,则output
永远不会更改。 请确保测试正确。 该语句位于while循环的顶部和底部,使您忽略其他所有输入行:
字= input.nextLine();
方法可以改进:
public static boolean isVowel(char ch) {
return "aeiou".contains(String.valueOf(ch).toLowerCase());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.