gpt4 book ai didi

java - 用于内联 String.format 调用的正则表达式——用字符串连接替换 %s

转载 作者:行者123 更新时间:2023-11-29 09:31:39 24 4
gpt4 key购买 nike

在我继承的代码库中,有人似乎喜欢String.format,写了如下代码:

String.format("%s: %s", message, e.getMessage())

我想用简单的字符串连接替换 String.format 调用,即

message + ": " + e.getMessage()

这当然可以用正则表达式加速搜索/替换,不是吗?

最佳答案

用正则表达式实现这一目标将具有挑战性。考虑以下搜索/替换模式:

搜索:

String\.format\(\s*"([^%]*)%s([^%]*)%s([^%]*)",\s*([^,()]*),\s*([^,()]*)\)

替换:

"\1" + \4 + "\2" + \5 + "\3"

这些模式(及其变体)有几个问题:

  • 它们仅适用于要替换的固定数量的 %s 字符串。
  • 如果格式字符串以 %s 开头或结尾,它们会生成空字符串。
  • 他们无法处理任意参数。在上面的表格中,只接受变量。包含 e.getMessage() 等方法调用的参数将不起作用。

您可以通过反复调整表达式来解决这些问题,但是这是否仍然可以节省您的工作量值得怀疑。


如果你还是想尝试一下,我推荐以下方法:

  1. 找到您要处理的 %s 占位符数量最多的模式,并根据所需的参数数量调整搜索和替换模式。
  2. 依次调整每个论点模式,使其与您的论点相匹配。例如,如果您有一个简单方法调用的参数,例如 e.getMessage(),请将适当的 ([^,()]*) 模式替换为 ( [^,()]*\(\))
  3. 继续减少一个 %s 占位符的表达式。
  4. 通过将 (+\s*"")|(""\s+) 替换为空字符串来删除所有连接的空字符串。

关于java - 用于内联 String.format 调用的正则表达式——用字符串连接替换 %s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48265369/

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