[英]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.