簡體   English   中英

哈希表內容:前兩個鍵為Null ...如何獲取我保存的內容

[英]Hashtable content : the first 2 Keys are Null … How to get my saved content

我的哈希表有問題...我有一個哈希表<String1,String2> String1 =是一個JTextfield作為我的哈希表鍵String2 =是一個JTextArea作為我的哈希表內容myHashtable.put(JTextfield.getText(),JTextArea.getText()); 現在我想將我的哈希表中所有保存的內容寫到文件中,但我的前2個內容為“空”

for (int i = 0; i < myHashtable.size(); i++) {
            String[] key = myHashtable.keySet().toString().split(", ");
            writer.println(key[i].replace("]", "").replace("[", "") + ": "
                    + myHashtable.get(key[i]));

以下輸出應類似於:

examplekey:一些內容
examplekey2:更多內容
examplekey3:一些內容
但它看起來像:

examplekey:null
examplekey2:空
examplekey3:一些內容

之所以這樣寫,是因為我想讀取此文件,以在重新啟動后獲取我的Hashtable內容,並且.keySet函數在開始和結束時給我一個“ [”和“]”,這就是我替換該文件的原因與“”。

您應該通過調試器運行程序,以更好地了解其功能。

讓我們來看一個例子:

Hashtable<String, String> myHashtable = new Hashtable<>();
myHashtable.put("1", "rat");
myHashtable.put("2", "cat");
myHashtable.put("3", "bat");

運行循環,第一次迭代將如下所示:

myHashtable.keySet().toString() -> "[3, 2, 1]"

String[] key = myHashtable.keySet().toString().split(", ") -> "[3", "2", "1]"

key[0] -> "[3"
key[0].replace("]", "").replace("[", "") -> "3"
myHashtable.get(key[0]) -> myHashtable.get("[3") -> null

如您所見, replace()返回一個新字符串,其中替換的字符串代替了目標字符串。 它不會修改原始字符串。 因此,當您調用myHashtable.get(key[0]) ,鍵為"[3" ,該鍵不在哈希表中,因此它返回null 如果使用示例哈希表運行代碼,則文件中將得到以下內容:

3: null
2: cat
1: null

它適用於中間的鍵,在示例中為"2" ,因為在拆分字符串時,它們已經沒有附加"[""]"鍵。

現在,請注意,當您執行myHashtable.keySet().toString().split(", ")您已經可以訪問鍵集中的元素。 您不必將其轉換為字符串,然后嘗試從該字符串獲取密鑰。 因此,您可以執行以下操作:

for (String key : myHashtable.keySet()) {
    writer.println(key + ": " + myHashtable.get(key));
}

如果直接迭代所有條目,我們可以使其速度更快:

for (Map.Entry<String, String> entry : myHashtable.entrySet()) {
    writer.out.println(entry.getKey() + ": " + entry.getValue());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM