2012-10-18 54 views
0

可能重複:
how to compare elements in a string array in java?爲什麼我的字符串數組有空值? (JAVA)

我試圖設置詞語的一個數組爲字符串,然後計算字不包括重複次數,但是當我嘗試使用if語句檢查重複項,它說「NullPointerException」表示數組中存在空值。爲什麼數組有空值?

下面是設置字符串數組的代碼,該輸入是「不要告訴別人,你將有他們做你們」:

String[] stringArray = new String[wordCount]; 
    while (!line.equals("DONE")) 
    { 
     for (int k = 0 ; k < wordCount ; k++) 
     { 
      //put tokens into string array 
      StringTokenizer tokens = new StringTokenizer(line); 
      stringArray[k] = tokens.nextToken(); 
     } 
    } 

這裏是使用於比較,並且如果語句的代碼NullPointerException異常:

for (int j = 0 ; j < wordCount ; j++) 
    {  
     for (int i = j+1 ; i < wordCount ; i++) 
     {  
      if (stringArray[i] == null) 
      { 
       stringArray[i] = "null"; 
      } 
      else if (stringArray[i].compareTo(stringArray[j]) == 0 && i!=j) 
      { 
       //duplicate 
       System.out.print("\n" + stringArray[j]); 
       duplicates++; 
      } 
     } 
    } 
    wordCount -= duplicates; 
    System.out.print("\nNumber of words, not including duplicates: " + wordCount); 

我想空檢查,但結果仍是遙遠,因爲它增加了更多的重複,因爲當我改變字符串數組[I]爲「空」它改變了字符串數組[J]還

請幫忙!我一直在試圖解決這個這麼久

+2

發佈完整的堆棧跟蹤將是有益的。 –

+1

空指針異常發生在哪一行? –

+0

你試過調試它嗎?你發現了什麼? – Uooo

回答

4

你應該使用equals()而非compareTo()compareTo()如果傳遞null,則產生NullPointerException。的Comparable

注意空

Java文檔沒有任何類的實例,並e.compareTo(空)應該拋出一個NullPointerException即使e.equals(空)返回false。

  if (stringArray[i] == null) { 
       continue; 
      } else if (stringArray[i].equals(stringArray[j]) && i != j) { 
       // duplicate 
       duplicates++; 
      } 

所以,完整的源代碼應該是這樣。 I have not changed any logic inside your for loop.

String line = "DO UNTO OTHERS AS YOU WOULD HAVE THEM DO UNTO YOU"; 
    String[] stringArray = line.split("\\s");//Use split StringTokenizer use is discouraged in new code 
    int duplicates = 0; 
    int wordCount = stringArray.length; 
    for (int j = 0; j < stringArray.length; j++) { 
     for (int i = j + 1; i < stringArray.length; i++) { 
      if (stringArray[i] == null) { 
       stringArray[i] = "null"; 
      } else if (stringArray[i].equals(stringArray[j]) && i != j) { 
       // duplicate 
       System.out.print("\n" + stringArray[j]); 
       duplicates++; 
      } 
     } 
    } 
    wordCount -= duplicates; 
    System.out.print("\nNumber of words, not including duplicates: " 
      + wordCount); 
+0

是的 - 但文檔參考的行爲? – 2012-10-18 05:22:49

+0

我試圖equals()和仍然有NullPointerException異常 – Katherine

+0

@Katherine。檢查代碼片段。 –

1

放下你if (stringArray[i] == null)空檢查。這不是必需的。相反,嘗試打印出數組初始化它,看看是否wordCount可能太大,或者標記生成器不破,你認爲它應該字符串之後。

0

通過@AmitD代碼看起來很棒!我想你和你的代碼具有唯一的問題是關於單詞計數 ..我想你是不是初始化字符串數組這可能會給你的例外,我是這麼understood..Just開始單詞計數一些value..Check如果單詞計數越來越財產以後或not..May是可以幫助...

相關問題