gpt4 book ai didi

java - 在 Java 中使用正则表达式处理带 header 的文本文件的策略

转载 作者:行者123 更新时间:2023-11-30 03:24:00 26 4
gpt4 key购买 nike

我有一个文件,其中包含带有注释的 header (例如 [Comment] 这是一条注释)和后续数据部分。数据从“Mk1=”开始。

我正在开发的程序应该:

  • 复制 header 内容
  • 仅在文件的数据部分中搜索和替换
  • 将 header 和数据写入新文件

我目前正在使用:

  • 字符串缓冲区
  • 扫描仪
  • 正则表达式.Pattern;

到目前为止,在我的代码中(精简到其要点):

public static void main(String[] args) {

File file = readFile("file.ext");

Scanner inputScanner = null;

try {
inputScanner = new Scanner(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}

String currentLine = "";

while(inputScanner.hasNext()) {
currentLine = inputScanner.findInLine(regexpPattern);

if (currentLine != null){
fileOutput.append(currentLine + "\n");
}
}

}

由于扫描程序的工作方式类似于队列,因此我很难弄清楚应该使用什么策略。我找到了使用匹配器而不是扫描器的示例。据我了解,由于 Scanner 的队列结构,我还必须使用 boolean 标志。 findInHorizo​​n() 方法似乎没有帮助,因为我希望 reg exp 仅适用于地平线之外。假设我知道标题开始和结束的一系列字符,扫描仪的分隔符是否可能存在“黑客”?

文件示例

[Comment]
Text goes here.

[Another Comment]
;Instructions: Below you will find Mk1= where the data can be assigned.
;More text.

Mk1=data
Mk2=data
Mk3=data

我应该使用什么策略?

最佳答案

假设您可以使用 java.nio.file.Files (自 Java 1.7 起)并且您的文本文件不太大,我会立即读取所有行并选择匹配器:

Charset charset = Charset.forName("UTF-8");
List<String> lines = Files.readAllLines(file.toPath(), charset);

for (String line : lines) {
Matcher matcher = regexpPattern.matcher(line);

if (matcher.matches()) {
// do something
}
}

使用正则表达式组对于检索参数值对非常有用:

Pattern dataPattern = Pattern.compile("^Mk(\\d+)=(.*)$");
Matcher dataMatcher = dataPattern.matcher(line);
int mk = Integer.parseInt(dataMatcher.group(1));
String data = dataMatcher.group(2);

关于java - 在 Java 中使用正则表达式处理带 header 的文本文件的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30704809/

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