可以使用String.split()方法得到的话,然后用printf格式化字符串:
for (String word: sentence.split(" ")) {
System.out.printf("%10s: %d\n", word, getConsonantCount(word));
}
(有关格式的更多信息,为的printf结账this cheatsheet) 现在的核心方法程序getConsonantCount()
可以实现为:
public static int getConsonantCount(String word) {
word = word.toLowerCase();
int consonantCnt = 0;
for (int i = 0; i < word.length(); i++) {
char ch = word.charAt(i);
if (Character.isLetter(ch)) {
if (vowels.indexOf(ch) == -1) {
consonantCnt++;
}
}
}
return consonantCnt;
}
基本上,我们首先验证字符是字母,然后检查它是否是一个元音或不试图获得其索引的字符串中vowels
。如果它不是元音(因此是辅音),则增加计数器。
public static String vowels = "aeiou";
手动方式(不String.split())
你正在试图做到这一点的方法是一种有效的方法。但问题是,你正在为每个新角色重新设置count
和word
。
所以,考虑这个问题:我们应该在哪里重置这些变量?
当我们找到一个词并处理它。它需要在其他块中完成。另外,打印出单词并在那里计数。 (现在,您正在处理每个字符后进行打印)。
for (int i = 0; i < sentence.length(); i++) {
if(Character.isLetter(sentence.charAt(i))) {
word += sentence.charAt(i);
}
else if(sentence.charAt(i) == ' ') {
for(int j=0;j<word.length();j++) {
ch = Character.toUpperCase(word.charAt(j));
if (ch !='A' && ch != 'E' && ch != 'I' && ch!= 'E' && ch != 'O' && ch != 'U') {
count++;
}
}
System.out.printf("%10s: %d\n", word, count);
count = 0;
word ="";
}
}
这并不代表硬道理。一种解决方案可能是预先在句子末尾添加空间。
当您遇到空间时,您也可以只是对辅音进行计数,而不是构建单词并对其进行处理。
count = 0;
int start = 0;
for (int i = 0; i < sentence.length(); i++) {
if (Character.isLetter(sentence.charAt(i))) {
ch = Character.toUpperCase(sentence.charAt(i));
if (ch != 'A' && ch != 'E' && ch != 'I' && ch != 'E' && ch != 'O' && ch != 'U') {
count++;
}
} else if (sentence.charAt(i) == ' ') {
System.out.printf("%10s: %d\n", sentence.substring(start, i), count);
start = i + 1;
count = 0;
}
}
这里,变量start
跟踪当前单词的开始。
至于stringArray
变量,请考虑将其设置为Map。
这是一个Java或JavaScript的问题?对于JavaScript,你不需要循环来分开一个句子。只需使用'var words = sentence.split(“”);'。这会给你一个单词的数组。从那里开始,你可以循环访问该数组,每个单词和每个单词,然后可以测试辅音。 –
任何替代'var'在JavaScript? – PrometheusWithoutMind
对于常量,有'let'用于块范围和'const'。 –