数字字符串上的Java String.split()

时间:2015-01-09 10:31:27

标签: java string

我有一个' |'带有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
...

我做错了什么?

4 个答案:

答案 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()非常容易使用,而StringTokenizerString.split()方法快得多。