Java在文件正则表达式中替换

标签 java regex file replace pattern-matching

我想在文件中放入一些正则表达式,并用分号(或其他东西)分隔另一个表达式,即:

orderNumber:* completionStatus;orderNumber:X completionStatus

我将有一个日志文件,其中包含:

.... orderNumber:123 completionStatus...

我希望它们看起来像:

.... orderNumber:X completionStatus...

如何在 Java 中执行此操作?

我尝试使用(键:正则表达式,值:替换)创建一个映射,读取我的日志文件,并为每一行尝试匹配键,但我的输出看起来相同。

FileInputStream fstream = new FileInputStream(file);
// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader( in ));
FileWriter fstreamError = new FileWriter(myFile.replace(".", "Replaced."));
BufferedWriter output = new BufferedWriter(fstreamError);

while ((strFile = br.readLine()) != null) {
    for (String clave: expressions.keySet()) {
        Pattern p = Pattern.compile(clave);
        Matcher m = p.matcher(strFile); // get a matcher object
        strFile = m.replaceAll(expressions.get(clave));
        System.out.println(strFile);
    }
}

对此有什么想法吗?

最佳答案

看来你走在一条好的道路上。不过,我建议几件事:

  1. 不要每次都编译正则表达式。您应该将它们全部预编译,然后在循环中从它们生成新的匹配器。
  2. 您并没有真正将 map 用作 map ,而是将其用作对的集合。您可以轻松制作一个小class RegexReplacement然后就有一个List<RegexReplacement>您在循环中迭代的内容。
<小时/>
class RegexReplacement { 
  final Pattern regex;
  final String replacement;
  RegexReplacement(String regex, String replacement) {
    this.regex = Pattern.compile(regex);
    this.replacement = replacement;
  }
  String replace(String in) { return regex.matcher(in).replaceAll(replacement); }
}
<小时/>

关于Java在文件正则表达式中替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11636805/

相关文章:

java - 为什么线程运行不一致?

java - 命令 java 在交互式 shell 中有效,但在 shell 脚本中无效

java - 正则表达式,禁止点 (.) 作为最后一个字符

mysql - 如何使用 MySQL 查找字段中只有特殊字符的行?

linux - 如何从 Linux 内核模块获取配置数据?

java - 如何在不使用 swing 类/方法的情况下嵌套布局管理器?

java - 易失变量语义

java - 获得独特的正则表达式匹配器结果(不使用 map 或列表)

创建文件函数

java - 如何删除包含Java中其他文件夹的文件夹?