我有一个.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并将其返回给客户端。
答案 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);
,依此类推。如果为空,则不会有问题。将其转换为数组的方式相同。