繁体   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