Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 哈希表get请求返回null而不是请求的数据_Java - Fatal编程技术网

Java 哈希表get请求返回null而不是请求的数据

Java 哈希表get请求返回null而不是请求的数据,java,Java,所以我有一个.csv文件,每一行都有相同的格式化键:data;扫描仪使用“;”作为delimeter,使用“:”从数据中分割密钥。当我打印哈希表时,它返回所有的值,当我调用第一个值时,它工作,但其他每个值都返回null,尽管它在我打印哈希表时显示为声明的值。我不知道为什么会这样,我尝试了每个变量,我尝试了复制和粘贴键来尝试,但不管怎样,如果不是第一个变量,我只会得到null 源代码: public static void main(String[] args) throws Exception

所以我有一个.csv文件,每一行都有相同的格式化键:data;扫描仪使用“;”作为delimeter,使用“:”从数据中分割密钥。当我打印哈希表时,它返回所有的值,当我调用第一个值时,它工作,但其他每个值都返回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");
  }
对于100%天然麸皮和其他麸皮,返回null。但是,返回100%麸皮的值


它应该返回请求的键的值。

因为,除了第一个键之外,其余的键不仅存储字符串,而且存储
\r\n

\r\n 100%天然麸皮
。这是存储在哈希表中的真正密钥,而不是
100%天然密钥
。下一个键也会发生同样的情况

要解决此问题,您应该在放置钥匙之前先
trim()

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

因为,除了第一个键之外,其余的不仅存储字符串,而且还存储
\r\n

\r\n 100%天然麸皮
。这是存储在哈希表中的真正密钥,而不是
100%天然密钥
。下一个键也会发生同样的情况

要解决此问题,您应该在放置钥匙之前先
trim()

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

这里的问题是没有正确处理行分隔符并将其附加到键名。因此,可能需要:

  • 修复扫描仪的分隔符:
    scanner.useDelimiter(;\r?\n?)
  • 或者在将键放入哈希表时修剪键:
    graines.put(args1[0].trim(),args1[1])
然后可以成功检索
100%天然麸皮的值

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


这里的问题是没有正确处理行分隔符并将其附加到键名。因此,可能需要:

  • 修复扫描仪的分隔符:
    scanner.useDelimiter(;\r?\n?)
  • 或者在将键放入哈希表时修剪键:
    graines.put(args1[0].trim(),args1[1])
然后可以成功检索
100%天然麸皮的值

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”,问题就解决了。谢谢所有帮助过我的人

我发现的问题是使用了“hasNext”和“next”,将其替换为“hasNextLine”和“nextLine”,问题得到了解决。谢谢所有帮助过我的人

注意:如文档中所述,不要在新代码中使用
Hashtable
。改为使用
HashMap
。注意:如文档中所述,不要在新代码中使用
Hashtable
。改用
HashMap