我正在开发一个项目,我们在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
高清
I am working on a project in which we insert key and value pairs in a Map.
If the key is present in the Map, my code returns the value for that key.
However, the HashMap is not returning the expected values, even though the key is present.
First I read the key and value pairs from a file, then I read another file which has almost the same keys as the first file.
Then I return values for some keys, but for many of them the value is null.
Here is a snippet of my code:
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); } }My input file is
abc;1
def;2
ghi;3
... and name will be abc
def
最满意答案
正在比较的字符串可能包含空格,换行符,换行符。
正如我们之前所怀疑的那样,你的输入文件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); } }Strings that are being compared might have white space, linefeed, newline characters.
As we suspected earlier your input file train.txt has man trailing white-spaces and that is causing map lookup to fail. Besides that your Java code had many redundant block of code. I have cleaned it up. Here is your modified code:
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); } }更多推荐
发布评论