2011-09-12 23 views
2

如何計算以字符串形式給出的句子的單詞?我們被允許僅使用以下內容:for循環,if語句,while,charAtlength()Java上的字數問題

我寫了這個代碼:

public static int getWordCount() 
{ 
    String data = "bla bla bla bla"; 
    int Count = 0; 
    for (int i=0; i<data.length(); i++) 
    { 
    if (data.charAt(i) != ' ') 
    Count ++; 
    } 
    return Count; 
} 

但只計算字母,而不是單詞。

+3

你特別忽略與'='「'的空間! 。也許你應該只包含帶'=='的空格'' –

+3

像'count'這樣的變量應該在camelCase中。 –

回答

9

這裏有個建議:算一下' '的數量並加1?

例子:

"bla bla bla bla" 
    1 2 3  : 3 + 1 = 4 

"hello" 
        : 0 + 1 = 1 

如果你想獲得看上你可以繼續名字類似lastWasSpace布爾變量,將其設置爲true運行到一個空當,當你運行它設置爲false變成非空間字符。如果只在lastWasSpace爲假時僅增加Count,則您還可以處理具有多個連續空格的字符串。

   "bla bla  bla" 
       1  2    : 2 + 1 = 3 
lastWasSpace: FFFFTTTFFFFTTTTTFFFF 
+2

如果有兩個單詞用多個空格分隔,會發生什麼? – Drahakar

+2

在這方面更新了我的答案。 – aioobe

+0

@Drahakar權利..因爲他們寫的問題,我們需要考慮到,也許是由多個(或更多)空間分隔 – Oshrib

2

給定的代碼確實會計算字母而不是單詞。您可能希望將條件更改爲:

if (data.charAt(i) == ' ') 

這意味着,如果找到空格,則會標記下一個單詞的開頭。此外,最後一個字不會被計算在內,因此您應該返回Count+1而不是Count

有幾種假設,我在這裏提出:

  1. 會有在字與字之間只有一個空格。
  2. 不會有任何前導或尾隨空格。

要考慮單詞之間的多個空格,您需要稍微修改代碼。不是檢查一個字符是否爲空格,而是檢查一個字符是否爲非空格,並且前一個字符是第一個字的情況下是空格還是無字符。這也將處理主要和尾隨空間。

1
String ss = " leading spaces in string "; 
String[] sa = ss.trim().split("\\w+"); 
System.out.println(sa.length); 

請注意使用trim來處理周圍的空白。

+0

不錯,但我們不能使用拆分。不管怎樣,謝謝你 !我學到了東西:) – Oshrib

+0

後來OP將有特殊的情況下處理點,逗號和其他特殊字符。使用正則表達式是要走的路。 +1 – medopal

+1

「無法使用拆分」的部分在問題中不太明顯:-)。 – Santosh

0

使用下面的代碼用於計算該行的話,

  int index = 0; 
      int numWords =0; 
      boolean prevwhitespace = true; 
      String line = "bla bla bla bla"; 
      while(index < line.length()) 
      { 
       char c = line.charAt(index++); 
       boolean currwhitespace = Character.isWhitespace(c); 
       if(prevwhitespace && !currwhitespace) 
       { 
        numWords++; 
       } 
       prevwhitespace= currwhitespace; 
      } 
      System.out.println("no. of words in the line :: " +numWords); 
1
public class Main { 

    public static void main(String[] args) { 
     String data = "This is a Test"; 
     int wordCount = 1; 
     int charCount = 0; 
     for (int i = 0; i < data.length(); i++) { 
      if (data.charAt(i) == ' ') { 
       wordCount++; 
      } else { 
       charCount++; 

      } 
     } 
     System.out.println("wordCount = " + wordCount); 
     System.out.println("charCount = " + charCount); 
    } 
} 
0

我的解決辦法:

public static int getWordCount() { 
    String data = "bla bla bla bla"; 
    String[] arr = data.split(" "); 
    return arr.length; 
} 
-2
String str = " Hello there my name  is Bill "; 
str = str.trim(); 
int count = 0; 
for(int i = 0; i<str.length(); i++) { 
    if(str.charAt(i) == ' ' && str.charAt(i-1) != ' ') { 
     count++; 
    } 
} 

System.out.println(count+1); 
+3

歡迎來到SO!你能解釋你的代碼嗎?感謝您的貢獻! – PatJ