我需要从我的 Eclipse 代码中删除所有 System.out 语句。
例子:
System.out.println("hello");
System.out.println("hello" +a);
System.out.println(1 +b12);
基本上所有System.out
语句,不管它们的参数是什么。
我必须以下,但它甚至没有接近
System.out.println(.)*;?``
System.setOut(somePrintStream)
作为替代方案,您可以尝试使用程序顶部将 System.out 重定向到其他地方(或无处) 。
如果您在 Eclipse 中运行,它还可以让您指定 System.out 应该去哪里而不是正常的控制台视图(在运行配置中的某个地方)。
如果这是为了摆脱调试日志记录,请考虑不要用任何东西替换它,而是用对日志记录框架的调用来替换它。然后您可以在运行时打开或关闭它。
您可以使用以下正则表达式并简单地查找和替换。有一个正则表达式查找和替换选项Eclipse
。
System.out.println\(([^;].*\)*);
我测试了以下
System.out.println(" ");
System.out.println(" fdfdf");
System.out.println(") fdfdf");
System.out.println(";");
System.out.println();
这可以帮助您找到正则表达式查找和替换Eclipse
这是正则表达式在线测试。我在那里放了一些数据。任何人都可以测试任何东西。
我会走以下(诚然有风)路线:
my.domain.ReplaceHelper
类public static void helpMeToReplaceSysouts(Object obj) {}
System.out.println
搜索和替换my.domain.ReplaceHelper.helpMeToReplaceSysouts
helpMeToReplaceSysouts
方法。你为什么不能试试这个呢?它也能胜任!
在 Eclipse 中,CTRL+F给出Find/Replace
窗口。在那给出以下字符串,
查找字符串 -System.out.println
替换字符串 -//System.out.println
万岁,你注释掉了所有的系统输出!
这很难有几个原因:
println
参数中可能存在任意复杂的语句,例如这使得使用正则表达式println(doA(4+(-1))+format(");");
很难找到语句的结尾。println
唯一可靠的方法是根据代码的类型 2 属性解析代码(正如Brandon 指出的那样),或者将其留给诸如 eclipse 的重构方法之类的工具(如RJ 所述)。^\s*System\.out\.println\(.*);\s*$
,但这不会捕获多行println
语句总体而言:Thilo 的答案是最佳选择。虽然这意味着您的代码必须已经相应地编写。
.*
捕获整个程序,因此请使用一些不会出现在输出语句中的分隔符,例如;
总而言之,我会使用类似的东西
System.out.println\([^;]*\);
最简单的方法是忽略括号。唯一可以确定的是,该语句将以“;”结尾 并且最有可能(取决于代码样式)使用新行。
如果没有行分隔符,.*?
则很有可能匹配您不匹配的任何内容。
^System\.out\.println.*?;\s*$
其他几个建议会得到大部分,但他们大多会忽略一些迂腐的案例,例如 SomeOtherSystem.out.println,或“此字符串包含 System.out.println()”,甚至是“类 System(){ public Someting out; ...}; System.out.println("这不是你想的那样");
归根结底,你不能 100% 完全用正则表达式来解释 Java。听起来您只想将它们从您自己的代码库中删除一次,所以只需使用它并检查结果即可。
如果您想真正正确地自动执行此操作(例如,如果您想构建一个工具来执行此操作),我建议您使用真正的 Java 解析器,例如:https ://code.google.com/ p/javaparser/