什么是用空格替换所有“System.out.println()”的正则表达式?

时间:2013-09-11 07:58:54

标签: java regex

我需要从eclipse上的代码中删除所有System.out语句。

示例:

System.out.println("hello");
System.out.println("hello" +a);
System.out.println(1 +b12);

基本上所有System.out语句,无论它们的参数是什么。

我必须接下来但是它甚至没有接近

  

的System.out.println(。)* ;?``

9 个答案:

答案 0 :(得分:6)

作为替代方案,您可以尝试使用程序顶部的System.setOut(somePrintStream)将System.out重定向到其他地方(或无处)。

如果您在Eclipse中运行,它还允许您指定System.out应该去的位置而不是正常的控制台视图(在运行配置中的某个位置)。

如果这是为了摆脱调试日志记录,请考虑将其替换为什么,而不是调用日志框架。然后你可以在运行时打开或关闭它。

答案 1 :(得分:3)

您可以使用以下正则表达式,只需查找和替换即可。在Eclipse中可以选择正则表达式查找和替换。

System.out.println\(([^;].*\)*);

我测试了以下

 System.out.println("  ");
 System.out.println("  fdfdf");
 System.out.println(")  fdfdf");
 System.out.println(";");
 System.out.println();

This可以帮助您在Eclipse

中找到正则表达式查找和替换

Here是正则表达式在线测试。我在那里放了一些数据。任何人都可以用任何东西进行测试。

答案 2 :(得分:3)

我会采取以下(无可比拟的风)路线:

  1. 使用my.domain.ReplaceHelper
  2. 创建课程public static void helpMeToReplaceSysouts(Object obj) {}
  3. 在源代码
  4. 中搜索并替换System.out.println的{​​{1}}
  5. 重构:内联my.domain.ReplaceHelper.helpMeToReplaceSysouts方法。

答案 3 :(得分:2)

为什么你不能尝试这个呢?它也能完成这项工作!

在Eclipse中, CTRL + F 会显示Find/Replace窗口。在那里给出以下字符串,

查找字符串 - System.out.println 替换字符串 - //System.out.println

Hurray,你注释掉了所有的sysouts!

答案 4 :(得分:1)

这很难有几个原因:

  • Java,与大多数语言一样,是Chomsky hierarchy中的Type 2(无上下文)语言。这意味着println参数中可能存在任意复杂的语句,例如println(doA(4+(-1))+format(");");,这使得使用正则表达式查找println语句的结尾非常困难。唯一可靠的方法是根据代码的类型2属性(如Brandon pointed out)解析代码,或者将其留给eclipse的重构方法(如R.J stated)等工具。
  • 遵循正则表达式方法,您可能会寻找行首/行尾行为,例如^\s*System\.out\.println\(.*);\s*$,但不会捕获多行 - println - 语句
  • 您将找不到正则表达式来捕获参数可能的所有可能情况。

总体而言:Thilo's answer是最佳选择。虽然这意味着您的代码必须已经相应地编写。

答案 5 :(得分:0)

  1. 你必须逃避括号
  2. 星号应立即跟随点表示“任意数量的任何字符”
  3. 您应该避免使用.*来捕获整个程序,因此请使用一些未出现在输出语句中的分隔符,例如;
  4. 总而言之,我会使用像

    这样的东西
    System.out.println\([^;]*\);
    

答案 6 :(得分:0)

最简单的方法是忽略括号。唯一确定的是,声明将以“;”结尾并且很可能(取决于代码样式)使用新行。

没有换行符,.*?很有可能匹配任何你不匹配的内容。

^System\.out\.println.*?;\s*$

答案 7 :(得分:0)

其他一些建议将获得大部分建议,但它们大多会忽略几个迂腐的情况,例如SomeOtherSystem.out.println,或者“此字符串包含System.out.println()”甚至“类系统” (){public Someting out; ...}; System.out.println(“这不是你认为的那样”);

最终,你无法单独使用正则表达式来完全理解Java。听起来你只想一次从你自己的代码库中删除它们,所以只需使用它并检查结果。

如果你想真正自动化这个(例如,如果你想构建一个工具来做到这一点),我建议你使用真正的Java解析器,如下所示:https://code.google.com/p/javaparser/

答案 8 :(得分:-2)

试试这个:System.out.println\(.*?\)

JSFiddle对于那些不相信的人(它是用JavaSscript编写的,不是Java,但是相同的模式可以在任何地方使用)

编辑此正则表达式:/System\.out\.println\((?<=\().*(?=\))\)/删除所有内部匹配括号: JSFiddle