【问题标题】:Search some string in Java code and replace it在 Java 代码中搜索一些字符串并替换它
【发布时间】:2011-07-13 17:21:55
【问题描述】:

在这个别人写的java代码中,人们使用null检查条件为null!=abcnull==abc,但我需要分别将其更改为abc!=nullabc==null

有人告诉我,这可以很容易地使用正则表达式来完成,因为直到现在我都在执行手动任务,但是搜索它然后手动替换它。

【问题讨论】:

  • 出于好奇:你为什么要改变它?
  • @haward : 一位经理告诉我.. 即使我不知道为什么.. 只是我需要改变..
  • 您在哪个编辑器/环境/ide 中执行此操作——这与您将如何执行正则表达式有关
  • 您确定要将null==abc 更改为abc=null 吗?它们有两种不同的含义(提示提示,一种是赋值)
  • @mrk:已更新问题。请立即查看。

标签: java regex pattern-matching


【解决方案1】:

我不知道布尔表达式右侧的所有要求,但假设它是一个变量名,\w 将是一个大致准确的搜索(参见 @ 987654321@ 获取变量名的完整规范)。

搜索字符串:

null\s*([!=]=)\s*(\w+)

替换字符串

$1 $2 null

【讨论】:

  • 您应该将 \s+ 替换为 \s* 以匹配 OP 给出的示例。
  • @Howard 谢谢,我想这就是我的想法,不知道为什么我放+
  • @Reensis :我试过上面那个。首先,替换字符串应该是$2 $1 null,而且更多的仅适用于简单条件,不适用于复杂条件。我也在阅读相同的内容,一旦我能找到一些东西就会发表评论。
  • @Renesis : 你知道该怎么做吗.. 我尝试了很多情况,但都不能正常工作
【解决方案2】:

用正则表达式无法正确完成。

考虑

/*
Print whether null==abc.
*/
System.out.print("null==abc : " + (null==abc));

如果您只想更改代码,即上面的第三个null==abc,那么您可以通过天真地使用正则表达式替换来更改代码,从而对字符串和注释内容进行意外更改。

而且你要小心不要改变

null==abc.def

abc==null.def

或改变

null==abc(def)

abc==null(def)

如果您对潜在的字符串和注释更改感到满意,并且打算检查更改以确保您没有破坏任何方法调用,那么您始终可以在 perl 中执行此操作。

perl -i.bak -pe 's/null(\s*[!=]=\s*)([\w.]+)/$2$1null/g' YourJavaFile.java

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    • 2020-01-14
    • 2022-08-17
    • 2020-07-09
    • 2011-04-13
    • 2017-01-10
    相关资源
    最近更新 更多