當前的實現是完全錯誤的:
- 如果字符串不包含空格,它不會進入
if
塊,並錯誤地返回0,因爲這是的count
初始值,這是從來沒有改變過
- 如果字符串包含空格,循環就不是你想要的:它總結了從0到
len
,例如,如果len = 5
,其結果將是0 + 1 + 2 + 3 + 4
- 沒有什麼在代碼中帳戶爲單詞。請注意,計算空間是不夠的,例如考慮輸入:「你好:-)」。注意單詞之間以及開始和結束之間的過多空格以及非單詞笑臉。
這應該是相對強勁:
int countWords(String text) {
String[] parts = text.trim().split("\\W+");
if (parts.length == 1 && parts[0].isEmpty()) {
return 0;
}
return parts.length;
}
繁瑣的if
條件有處理一些特殊的情況:
單元測試:
@Test
public void simple() {
assertEquals(4, countWords("this is a test"));
}
@Test
public void empty() {
assertEquals(0, countWords(""));
}
@Test
public void only_non_words() {
assertEquals(0, countWords("@#$#%"));
}
@Test
public void with_extra_spaces() {
assertEquals(4, countWords(" this is a test "));
}
@Test
public void with_non_words() {
assertEquals(4, countWords(" this is a test :-) "));
}
你所說的 「預建計劃」 是什麼意思?你可以使用Scanner類,還是僅限於String類的方法? – Pshemo
@Pshemo我的意思是類似於下面的一些答案:.trim,.split,parts,.isEmpty()。我們還沒有了解NULL,所以我不知道這意味着什麼。 – Maria