2013-03-17 122 views
0

我想將一個字符串轉換爲數字數組,因此我定義了一個哈希映射來完成這項工作。這裏是我的代碼:使用HashMap時出現錯誤

import java.util.*; 

public class DES { 

static HashMap<String, Integer> numMap = new HashMap<String, Integer>(); 

private static void init(){ 
    numMap.put("a", 0); 
    numMap.put("b", 1); 
    numMap.put("c", 2); 
    numMap.put("d", 3); 
    numMap.put("e", 4); 
    numMap.put("f", 5); 
    numMap.put("g", 6); 
    numMap.put("h", 7); 
    numMap.put("i", 8); 
    numMap.put("j", 9); 
    numMap.put("k", 10); 
    numMap.put("l", 11); 
    numMap.put("m", 12); 
    numMap.put("n", 13); 
    numMap.put("o", 14); 
    numMap.put("p", 15); 
    numMap.put("q", 16); 
    numMap.put("r", 17); 
    numMap.put("s", 18); 
    numMap.put("t", 29); 
    numMap.put("u", 20); 
    numMap.put("v", 21); 
    numMap.put("w", 22); 
    numMap.put("x", 23); 
    numMap.put("y", 24); 
    numMap.put("z", 25); 
    numMap.put(" ", 26); 
    numMap.put(".", 27); 
    numMap.put(",", 28); 
    numMap.put("?", 29); 
    numMap.put("(", 30); 
    numMap.put(")", 31); 

} 

public static void main(String[] args) { 

    init(); 

    String plaintext = "how do you like computer science"; 
    String[] splittext=plaintext.split(""); 
    int[] numtext=new int[splittext.length]; 
    for(int i=0;i<splittext.length;i++) 
    { 
     numtext[i]=numMap.get(splittext[i]); 
     System.out.println(numtext[i]); 
    } 
} 


} 

我運行時,有一個「空指針異常」,但我猜散列圖是確定的,因爲我想是這樣

numtext[i]=numMap.get("z"); 

,它工作正常。所以也許我的splittext數組存在一些問題?

+1

也許你應該指出'NullPointerException'發生的位置。我的猜測是,你不能分裂在一個空字符串... – 2013-03-17 04:37:24

+0

我想分裂在一個空字符串會分裂'明文'字母的字母,所以它沒有。我對數組'splittext'進行了迭代,是的,每個元素都是單個字母。當然,異常發生在「numtext [i] = numMap.get(splittext [i]);」 – phil 2013-03-17 04:40:08

回答

4

Arrays.toString(splittext)

[, h, o, w, , d, o, , y, o, u, , l, i, k, e, , c, o, m, p, u, t, e, r, , s, c, i, e, n, c, e, ] 

splittext第一個元素是空字符串,其具有在沒有映射關係的HashMap,因而對get()NullPointerException

你可以通過跳過splittext的第一個元素來解決這個問題。 String#split()有一種方法可以避免拖尾空白,但不能導致空白,所以我認爲你不能以任何其他方式做到這一點。

更好的解決方案是僅在使用String#toCharArray()比分割上一個空字符串:)

+0

正是!跳過第一個元素修復它。謝謝! – phil 2013-03-17 04:51:26

1

String[] splittext = plaintext.split("");更好創建具有​​空字符串

[, h, o, w, , d, o, , y, o, u, , l, i, k, e, , c, o, m, p, u, t, e, r, , s, c, i, e, n, c, e] 

和numMap.get(「」)的陣列;返回null。您可以添加與鍵的條目=「」到地圖來解決這個問題

numMap.put("", 32); 
+0

是的,第一個元素,這是一個空字符串導致問題。 – phil 2013-03-17 04:52:16

+0

你確定你不只是從我的答案複製? :) – 2013-03-17 04:54:09

1

既然你是剛剛拆分的每一個字符的字符串,我會考慮只是存儲字符的地圖,使用plaintext.toCharArray(),和然後遍歷結果數組,查找映射中的每個字符

0

您試圖使用條目字符串模式(「」)將字符串拆分,結果字符串不會被拆分,並且您得到NullPointerException正試圖訪問拆分字符串(不存在)。嘗試使用(「\ s」)將字符串拆分爲空格來分割字符串。

希望這會有所幫助。