2015-02-24 58 views
1

我已經編寫代碼來打印字符串中的第一個非重複字符,所有工作都正常。但是當打印字符時,它給出null。例如Sting input =「ttaasjji kkk eee」,那麼它應該打印's'作爲第一個非重複字符以下是我的java代碼。在使用java給出錯誤字符的字符串中第一個不重複的字符?

public static void main(String[] args) { 
    LinkedHashMap hm = new LinkedHashMap(); 
    //HashMap hm=new HashMap(); 
    String input = "ttaasjjikkk eee "; 
    input = input.trim(); 
    for (int i = 0; i < input.length(); i++) { 
     char c = input.charAt(i); 
     Integer val = (Integer) hm.get(c); 
     if (c != ' ') {//to exclude space count 
      if (val != null) { 
       hm.put(c, val + 1); 
      } else { 
       hm.put(c, 1); 
      } 
     } 
    } 
    System.out.println(hm);//each char count  
    Iterator itr = (Iterator) hm.keySet().iterator(); 
    while (itr.hasNext()) { 
     Object temp = hm.get(itr.next()); 
     String sTemp = temp.toString(); 
     int value = Integer.parseInt(sTemp); 
     if (value == 1) { 
      System.out.println("First non repeated character is: " + hm.get(temp) + "," + temp); 
      return; 
     } 
    } 
} 

請幫助我,您的幫助將不勝感激。

回答

1

您使用的地圖鍵設置。您需要入門集,以便您可以檢查每個條目的值。這就是存儲計數 - 無需將字符串解析爲整數。

你也應該解決所有的代碼使用泛型,避免所有的鑄造:

import java.util.*; 

class Test { 
    public static void main(String[] args) { 
     // Key type is Character, value type is Integer 
     Map<Character, Integer> map = new LinkedHashMap<>(); 
     String input = "ttaasjjikkk eee "; 
     input = input.trim(); 
     for (int i = 0; i < input.length(); i++) { 
      char c = input.charAt(i); 
      Integer val = map.get(c); 
      if (c != ' ') { 
       if (val != null) { 
        map.put(c, val + 1); 
       } else { 
        map.put(c, 1); 
       } 
      } 
     } 

     System.out.println(map); 

     // Enhanced for loop to make it easier to iterate 
     for (Map.Entry<Character, Integer> entry : map.entrySet()) { 
      if (entry.getValue() == 1) { 
       System.out.println("First non repeated character is: " 
        + entry.getKey()); 
       return; 
      } 
     } 
    } 
} 
2

您正在打印錯誤的東西。您應該打印第一鍵(字符),其值爲1

相反,你要打印hm.get(temp),這是無效的,因爲tempInteger和你的地圖沒有Integer鍵。

它應該是:

while (itr.hasNext()) { 
    Character key = (Character) itr.next(); 
    Object temp = hm.get(key); 
    String sTemp = temp.toString(); 
    int value = Integer.parseInt(sTemp); 
    if (value == 1) { 
     System.out.println("First non repeated character is: " + key + "," + temp); 
     return; 
    } 
} 

我建議你使用參數化類型,爲了避免這樣的困惑。而不是原始LinkedHashMap,使用LinkedHashMap<Character,Integer>

輸出:

{t=2, a=2, s=1, j=2, i=1, k=3, e=3} 
First non repeated character is: s,1 
相關問題