gpt4 book ai didi

java - 正则表达式解析多行数据

转载 作者:行者123 更新时间:2023-11-30 04:06:17 27 4
gpt4 key购买 nike

我有来自文件的以下数据,我想看看是否可以在此处进行正则表达式解析

Name (First Name)   City       ZipJohn (retired)                 10007Mark                Baltimore  21268........Avg Salary70000               100%

它不是一个大文件,文件中的全部数据都可以在带有换行符 (\n) 的 String 对象中使用(String data =“文件中的数据”)

  1. 我正在尝试获取姓名、城市、邮政编码以及工资、百分比详细信息
  2. () 内的数据被视为名称字段的一部分。
  3. 对于“名称”字段,空格被视为有效,其他字段没有空格。
  4. “平均薪资”仅在文件末尾可用

通过 Java 中的正则表达式解析可以轻松做到这一点吗?

最佳答案

如果文本文件是空格对齐的,您可以(并且可能应该)根据字符数提取字段。因此,您将每行中的前 n 个字符作为名字,接下来的 m 个字符作为城市,依此类推。

这是使用上述方法提取的代码,假设我们知道 header ,通过自动计算字段的字段长度。

String data = "data from the file";

// This is just to ensure we have enough space in the array
int numNewLines = data.length()-data.replace("\n","").length();
String[][] result = new String[numNewLines][3];
String[] lines = data.split("\n");
int avgSalary = 0;
int secondFieldStart = lines[0].indexOf("City");
int thirdFieldStart = lines[0].indexOf("Zip");
for(int i=1; i<lines.length; i++){
String line = lines[i].trim();
if(line.equals("Avg Salary")){
avgSalary = Integer.parseInt(lines[i+1].substring(0,secondFieldStart).trim());
break;
}
result[i-1][0] = line.substring(0,secondFieldStart).trim(); // First Name
result[i-1][1] = line.substring(secondFieldStart,thirdFieldStart).trim(); // City
result[i-1][2] = line.substring(thirdFieldStart).trim(); // Zip
}

使用正则表达式是可能的,但会更复杂。而且正则表达式无论如何都无法区分人名和城市名称:

考虑这种情况:

John Long-name Joe New York   21003

如果您不知道第一个字段的长度,您怎么知道名字是 John Long-name Joe 而不是 John Long-name Joe New最多20个字符? (请注意,John Long-name Joe 的长度为 19 个字符,与 New in New York 之间留有一个空格)

当然,如果您的字段由其他字符分隔(例如制表符 \t),您可以基于此拆分每一行。并且很容易修改上面的代码以适应这一点 =)

由于我上面提出的解决方案更简单,我想您可能想尝试一下 =)

关于java - 正则表达式解析多行数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20647976/

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