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