我正在开发一个项目,我们在Map
中插入键和值对。
如果密钥出现在Map
中,我的代码将返回该密钥的值。
但是,即使密钥存在,HashMap
也不会返回预期值。
首先,我从文件中读取键和值对,然后读取另一个与第一个文件几乎相同的文件。
然后我返回某些键的值,但对于其中许多键,值为null
。
以下是我的代码片段:
Scanner scanner = new Scanner(new FileReader("a.txt"));
LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
while (scanner.hasNextLine())
{
String[] columns = scanner.nextLine().split(";");
map.put(columns[0], columns[1]);
}
System.out.println(map);
for (Map.Entry<String, String> entry : map.entrySet())
{ // name is the input of second file
if (entry.getKey().equals(name))
{
num = entry.getValue();
fun(num);
}
}
我的输入文件是
ABC; 1
DEF; 2
GHI; 3
... 和名字将是 ABC
DEF
答案 0 :(得分:3)
如果对象的hashCode在插入后发生更改,则会出现此问题。
答案 1 :(得分:2)
正在比较的字符串可能包含空格,换行符,换行符。
正如我们之前所怀疑的那样,您的输入文件train.txt
有人尾随空格,这导致地图查找失败。除此之外,您的Java代码还有许多冗余代码块。我把它清理干净了。这是您修改后的代码:
import java.io.*;
import java.util.*;
public class ExampleClass1 {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(new FileReader("trainnames.txt"));
LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
while (scanner.hasNextLine()) {
String[] columns = scanner.nextLine().split(";");
map.put(columns[0].trim(), columns[1].trim());
}
scanner.close();
System.out.println("******** map is: " + map);
File file = new File("onn.csv"); // output file
FileWriter fileWriter = new FileWriter(file);
scanner = new Scanner(new FileReader("train.txt"));
while (scanner.hasNextLine()) {
String line = scanner.nextLine().trim();
if (line.charAt(0) == '>') {
//System.out.println("==== line: [" + line + ']');
String num = map.get(line);
no(num, fileWriter);
}
}
scanner.close();
fileWriter.close();
}
public static void no(String num, FileWriter fileWriter) throws IOException {
fileWriter.append(num + ',' + System.getProperty("line.separator"));
System.out.println(num);
}
}