我有一个' |'带有2列的分隔csv文件:
A |B
87657|5
87688|8
32134|4
...
我想通过读取此文件来创建Map,将A列值作为字符串,将B列值作为int。
我这样做(带分隔符=" |"):
Map<String, Integer> output = new HashMap<>();
assert delimiter.length() == 1;
int count = 0;
for(String line: Files.readAllLines(Paths.get(docidFreq), Charset.defaultCharset())) {
count++;
//skipping header row
if (count == 1 ) {
continue;
}
String tokens[] = line.split(delimiter);
output.put(tokens[0], Integer.parseInt(tokens[1]));
}
return output;
但是,地图包含单个数字键和值(与上面给出的示例文件行无关):
1:2
8:5
9:3
...
我做错了什么?
答案 0 :(得分:9)
当您使用符号'|'时你必须在分裂时用两个'\'来逃避它。
split("\\|");
答案 1 :(得分:0)
您可以执行以下操作:
StringTokenizer st = new StringTokenizer (line, "\\|");
map.put(st.nextToken(), Integer.parseInt(st.nextToken()));
答案 2 :(得分:0)
尝试类似:
String line = "87657|5";//line from a file
Map<String, Integer> map = new HashMap<String, Integer>();
String[] numbers = line.split("\\|");//assuming you have entries in file like "num1|num2"
map.put(numbers[0], Integer.parseInt(numbers[1]));
System.out.print(map);
Output:
{87657=5}
答案 3 :(得分:0)
您可以使用以下任何一种方式:
String[] str = line.split("\ \|");
或
StringTokenizer st = new StringTokenizer (line, "\ \|");
split()
非常容易使用,而StringTokenizer
比String.split()
方法快得多。