在我继承的代码库中,有人似乎喜欢String.format
并编写如下代码:
String.format("%s: %s", message, e.getMessage())
我想用简单的字符串连接替换String.format
调用,即
message + ": " + e.getMessage()
这当然可以用正则表达式加速搜索/替换,不是吗?
答案 0 :(得分:0)
使用正则表达式实现此目标将具有挑战性。请考虑以下搜索/替换模式:
搜索:
String\.format\(\s*"([^%]*)%s([^%]*)%s([^%]*)",\s*([^,()]*),\s*([^,()]*)\)
替换:
"\1" + \4 + "\2" + \5 + "\3"
这些模式(及其变体)有几个问题:
%s
字符串进行替换。%s
开头或结尾,则会生成空字符串。e.getMessage()
等方法调用的参数将无效。你可以通过反复调整表达式来解决这些问题,但是如果这仍然可以让你保持工作,这是值得怀疑的。
如果你想尝试一下,我建议采用以下方法:
%s
占位符数量最多的模式,并使搜索和替换模式适应所需的参数数量。e.getMessage()
之类的简单方法调用参数,请将([^,()]*)
模式替换为([^,()]*\(\))
%s
占位符少的表达式。(+\s*"")|(""\s+)
替换为空。答案 1 :(得分:-2)
出于性能原因,我不建议这样做。
使用串联时,String池会快速填满,因为对于每次连接,都会创建一个String的新副本。