我有一些包含以下内容的.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具有相同的大小时它也可以工作;但是,我的行并不总是有相同的长度。如何以一种很好的方式分割我的线条,以便我可以拥有我需要的元素。
答案 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]