gpt4 book ai didi

java - 当不同行在不同位置有空格时如何拆分基于空格的记录

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:46 26 4
gpt4 key购买 nike

我有一个包含如下记录的文件,我试图根据空格拆分其中的记录并将它们转换为逗号。

文件:

a 3w 12 98 header P6124
e 4t 2 100 header I803
c 12L 11 437 M12


BufferedReader reader = new BufferedReader(new FileReader("/myfile.txt"));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
String[] splitLine = line.split("\\s+")

如果数据由多个空格分隔,我通常使用正则表达式替换 -> split('\\s+')split("+") .但在上面的例子中,我有一个记录 c,它没有数据 header。因此,正则表达式“\s+”或“+”将跳过该记录,我将得到一个空白区域,如 c,12L,11,437,M12 而不是 c,12L,11,437,, M12

在这种情况下,如何根据任何定界符正确拆分行,以便获得以下格式的数据:

a,3w,12,98,header,P6124
e,4t,2,100,header,I803
c,12L,11,437,,M12

谁能告诉我如何实现这一点?

最佳答案

也许您可以尝试使用更复杂的方法,使用复杂的正则表达式来精确匹配每行的六个字段,并明确处理第五个字段缺失值的情况。我重写了您的示例,添加了一些控制台日志 以澄清我的建议:

public class RegexTest {
private static final String Input = "a 3w 12 98 header P6124\n" +
"e 4t 2 100 header I803\n" +
"c 12L 11 437 M12";

public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new StringReader(Input));
String line = null;
Pattern pattern = Pattern.compile("^([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+)? +([^ ]+)$");

do {
line = reader.readLine();
System.out.println(line);
if(line != null) {
String[] splitLine = line.split("\\s+");
System.out.println(splitLine.length);

System.out.println("Line: " + line);
Matcher matcher = pattern.matcher(line);
System.out.println("matches: " + matcher.matches());
System.out.println("groups: " + matcher.groupCount());
for(int i = 1; i <= matcher.groupCount(); i++) {
System.out.printf(" Group %d has value '%s'\n", i, matcher.group(i));
}
}
} while (line != null);
}
}

关键是用于匹配每一行的模式需要六个字段的序列:

  • 对于每个字段,值被描述为[^ ]+
  • 字段之间的分隔符描述为+
  • 第五个(可空)字段的值描述为 [^ ]+?
  • 使用括号将每个值捕获为一个组:( ... )
  • 每一行的开始(^)和结束($)都被显式标记

然后,每一行与给定的模式进行匹配,获得六个组:您可以使用 matcher.group(index) 访问每个组,其中 index基于 1 因为 group(0) 返回完全匹配。

这是一种更复杂的方法,但我认为它可以帮助您解决问题。

关于java - 当不同行在不同位置有空格时如何拆分基于空格的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57924117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com