簡體   English   中英

哈希表獲取請求返回 null 而不是請求的數據

[英]Hashtable get request returning null instead of requested data

所以我有這個.csv 文件,每一行都有相同的格式鍵:數據; 並且掃描儀使用“;” 作為分隔符,“:”用於從數據中拆分密鑰。 當我打印哈希表時,它返回所有值,當我調用它的第一個值時,它會起作用,但是所有其他值都會返回 null,盡管它在我打印哈希表時顯示為已聲明。 我不知道為什么會這樣,我已經嘗試了每個變量,我已經嘗試復制並粘貼密鑰來嘗試,但無論如何,如果它不是第一個變量,我只會得到 null。

源代碼:

public static void main(String[] args) throws Exception
  {
    Hashtable<String, String> Cereals = new Hashtable<String, String>();
    Scanner scanner = new Scanner(new File("Cereal.csv"));
    scanner.useDelimiter(";");
    while (scanner.hasNext())
    {
      String[] args1 = (scanner.next()).split(":"); //Splits the information by :
      Cereals.put(args1[0],args1[1]);
    }
    scanner.close()
    System.out.println(Cereals.get("100% Natural Bran");
  }

部分.csv:

100% Bran:C/70/4/1/130/10/5/6/280/25/3/1/0.33/68.402973;
100% Natural Bran:C/120/3/5/15/2/8/8/135/0/3/1/1/33.983679;
All-Bran:C/70/4/1/260/9/7/5/320/25/3/1/0.33/59.425505;
All-Bran with Extra Fiber:C/50/4/0/140/14/8/0/330/25/3/1/0.5/93.704912;
Almond Delight:C/110/2/2/200/1/14/8/-1/25/3/1/0.75/34.384843;

返回 100% 天然麩皮的 null 和其他。 但是返回 100% 麩皮的值。

它應該返回請求鍵的值。

因為,除了第一個鍵,rest 不僅存儲字符串,還存儲\r\n

\r\n100% Natural Bran 那是存儲在 HashTable 中的真正密鑰,而不是100% Natural Bran 下一個鍵也會發生同樣的情況。

要解決它,您應該在放置之前trim()

Cereals.put(args1[0].trim(), args1[1]);

這里的問題是行分隔符沒有正確處理並附加到鍵名。 所以可能需要:

  • 修復掃描儀的分隔符: scanner.useDelimiter(";\r?\n?");
  • 或在將它們放入哈希表時修剪鍵: Cereals.put(args1[0].trim(),args1[1]);

那么100% Natural Bran的值就可以成功檢索到了:

System.out.println(Cereals.get("100% Natural Bran"));
// C/120/3/5/15/2/8/8/135/0/3/1/1/33.983679

我發現的問題是使用“hasNext”和“next”,通過用“hasNextLine”和“nextLine”替換它,問題就解決了。 不過感謝所有幫助過我的人!

暫無
暫無

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

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