2014-01-28 111 views
0

我似乎無法弄清楚爲什麼這不起作用,但我可能只是錯過了一些簡單的邏輯。該方法似乎沒有找到最後一個詞,當它後面沒有空格時,所以我猜對i ==本身.length()-1有什麼錯誤,但在我看來,它會返回真正;你在最後一個字符,它不是一個空白。查找字符串中的字數

public void numWords() 
{ 
    int numWords = 0; 
    for (int i = 1; i <= itself.length()-1; i ++) 
    { 
     if ((i == (itself.length() - 1) || itself.charAt (i) <= ' ') && itself.charAt(i-1) > ' ') 
      numWords ++; 
    } 
    System.out.println(numWords); 
} 

本身就是字符串。我以我的方式比較角色,因爲這就是它在書中顯示的方式,但請讓我知道是否有更好的方法。

+0

http://stackoverflow.com/questions/8924599/how-to-count-the-exact-number-of-words-in-a-string-that-has-empty-spaces-between – HpTerm

+0

燦你是不是在空白處分裂? http://stackoverflow.com/questions/225337/how-do-i-split-a-string-with-any-whitespace-chars-as-delimiters – plalx

+0

感謝您的鏈接,我沒有看到與我的簡短搜索。 – user2034276

回答

1

幼稚的方法:把所有有空格的東西當作一個詞。這樣,只需計算String#split操作結果中的元素數量即可。

public int numWords(String sentence) { 
    if(null != sentence) { 
     return sentence.split("\\s").length; 
    } else { 
     return 0; 
    } 
} 
+0

這是超級酷,謝謝我是新的,並沒有看到過。 – user2034276

0

嘗試,

int numWords = (itself==null) ? 0 : itself.split("\\s+").length; 
0

所以基本上好像你正在試圖做它來計算空白的所有數據塊中的字符串。我將修復你的代碼並使用我的頭部編譯器來幫助你解決你遇到的問題。

public void numWords() 
{ 
    int numWords = 0; 
    // Don't check the last character as it doesn't matter if it's ' ' 
    for (int i = 1; i < itself.length() - 1; i++) 
    { 
     // If the char is space and the next one isn't, count a new word 
     if (itself.charAt(i) == ' ' && itself.charAt(i - 1) != ' ') { 
      numWords++; 
     } 
    } 
    System.out.println(numWords); 
} 

這是一個很天真的算法和失敗,在少數情況下,如果在字符串中的多個空格例如'hello world '結束,它會算3個字。

請注意,如果我要實現這樣的方法,我會採用類似於Makoto的答案的正則表達式來簡化代碼。

+0

謝謝,我欣賞評論 – user2034276

0

下面的代碼片段做的工作做得更好:

if(sentence == null) { 
    return 0; 
} 
sentence = sentence.trim(); 
if ("".equals(sentence)) { 
    return 0; 
} 
return sentence.split("\\s+").length; 
  • \\s+在幾個空間的情況下正常工作的正則表達式。 trim()
  • 刪除trailng和前導空格其他空行檢查
  • 防止結果1爲空字符串。