由于数据具有空字段,因此如何获取等长数组

时间:2019-05-16 17:36:31

标签: java

我有一个.dat文件,其格式如下表所示:

Dy MxT   MnT   AvT   HDDay  AvDP
1  88    59    74          53.8
3  77    55    66          39.6
9  86    32*   59       6  61.5
3  77    55    66          39.6

我为每一行创建了一个字符串列表,如下所示:

1  88    59    74          53.8

在用空格分隔字符串之后,由于字段“ HDDay”并不总是具有值,因此我得到了不同长度的数组。 例如,分割(“ +”)行nr之后的结果。 1是:

array[0] //1
array[1] //8
array[2] //59
array[3] //74
array[4] //53.8

但是我想要:

array[0] //1
array[1] //8
array[2] //59
array[3] //74
array[4] //"" ==> empty value
array[5] //53.8

这是我尝试做的事情:

    Charset charset = Charset.forName("ISO-8859-1");
    //get list of String
    List<String> result = Files.readAllLines(Paths.get(path), charset);

    for(int i = 1; i < result.size(); i++){
        //Exclude empty line
        if(!result.get(i).isEmpty()){
            //splitting each line by space
            String[] values = result.get(i).split("\\s+");
            for(int k = 0; i < values.length; k++){
                System.out.println(values[k]);
            }
        }
    }

之所以需要它,是因为我想创建一个Java对象以解析json并将其返回给客户端。

2 个答案:

答案 0 :(得分:1)

您可以尝试一些方法。 第一种选择:由于它是.dat文件,并且看起来大部分都是结构化的,因此您可以使用竖线(|)或(,)分隔,就像对任何csv文件一样。

第二个选项:如果您可以控制两者之间的空格数,则可以在正则表达式代码中放入一个限制,然后除以该限制。

例如:

String s = "1  88    59    74          53.8";
String[] stringArray = s.split("\\s{2,5}");

如果您在此处看到,我指定2为空格的最小字符,并指定5为空格的最大字符。如果它甚至在5个字符之后都找到空格,则应该会为您提供所需的输出。

答案 1 :(得分:0)

如果您的.dat文件始终具有相同的格式,那么在发现每一列的长度之后,当然可以在每个字符串行中使用java.lang.String类的方法子字符串,然后将每个片段映射为每个属性。

例如:

1  88    59    74          53.8

将具有以下内容:

String Dy = line.substring(0,2);
String Mxt = line.substring(6, 6);

,依此类推。如果为空,则不会有问题。将其转换为数组的方式相同。