可以使用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'。 –