使用基于多个分隔符和不同空行长度的分割

时间:2016-08-22 11:41:16

标签: java string replace

我有一些包含以下内容的.dat文件:

<D,E>   200  200    799  1220   No   [<805,1380,Voltage,3,2>]
<A,C>   300  300    415  1230  Yes   [<417,1340,Voltage,3,0><415,1230,Current,3,1>]
<D,B>   200  200    799  122    No   [<80,137,Voltage,3,2>]
  .
  .

我想拥有每一行,第三元素的内容;第一行为200,第二行为300,第三行为200。我还希望第二行有0和1(我想添加它们),第一行和第三行有2。

我试过这个

while ((line = file.readLine()) != null) {

        if (line != null && !line.trim().isEmpty()) {
            line = line.replace(" ", "|");
            line = line.replace("||", "");
            System.out.println(line);

            String[] temp = line.split("|");
            String temp1 = "";
            String temp2 = "";

            //System.out.println(temp[52]);
            if (temp.length == 55) {
                temp1 = temp[11] + temp[12] + temp[13];
                temp2 = temp[52];


            } else if (temp.length==52){
                int len = temp.length;
                temp1 = temp[11] + temp[12] + temp[13];
                temp2 = temp[temp.length - 3];

            }

}

对于它工作的第一行,当temp.length具有相同的大小时它也可以工作;但是,我的行并不总是有相同的长度。如何以一种很好的方式分割我的线条,以便我可以拥有我需要的元素。

1 个答案:

答案 0 :(得分:1)

您可以先用空格分割字符串(使用.split("\\s+"))然后使用像([0-9]+)>这样的简单正则表达式来提取>之前的数字块:

// Init the regex here
String rx = "([0-9]+)>";

// Then the part where you read the lines
String line = reader.readLine();
while (line != null) {
    String[] chunks = line.split("\\s+"); // Split with whitespace
    if (chunks.length > 2) { // chunks[2] = 200 / 300 values
        Matcher m = p.matcher(line); // Init Matcher to find all numbers at the end of >
        int val = 0;
        while (m.find()) {  // Find multiple occurrences numbers before >
            val += Integer.parseInt(m.group(1)); // Group 1 contains the number, summing up
        }
        res.add(chunks[2]);
        res.add(Integer.toString(val));
    }
    line = reader.readLine();
}
System.out.println(res); // => [200, 2, 300, 1, 200, 2]

请参阅IDEONE Java demo