我的功能类似于下面出现在多个文件中的功能。我想使用正则表达式去除对outputString
的所有引用,因为很明显,它们是浪费的。
... other functions, class declarations, etc
public String toString()
{
String outputString = "";
return ... some stuff
+ outputString;
}
... other functions, class declarations, etc
我很高兴在多次传球中这样做。到目前为止,我已经有了正则表达式来查找第一行和最后一行(String outputString = "";$
和( \+ outputString;)$
)。但是,我有两个问题:首先,我想摆脱导致删除引用outputString
的两行的空格。其次,我需要在倒数第二行的最后;
向上移动到它上面的一行。
作为奖励,我还想知道将行开始锚点(^
)添加到我指定的任一正则表达式中有什么问题。似乎这样做会使他们收紧,但当我尝试像^( \+ outputString;)$
这样的事情时,我得到零结果。
毕竟说完了,上面的功能应该是这样的:
... other functions, class declarations, etc
public String toString()
{
return ... some stuff;
}
... other functions, class declarations, etc
以下是一些“某些东西”的例子:
"name" + ":" + getName()+ "," +
"id" + ":" + getId()+ "]" + System.getProperties().getProperty("line.separator") +
" " + "student = "+(getStudent()!=null?Integer.toHexString(System.identityHashCode(getStudent())):"null")
这是一个具体的例子:
电流:
public void delete()
{
Student existingStudent = student;
student = null;
if (existingStudent != null)
{
existingStudent.delete();
}
}
public String toString()
{
String outputString = "";
return super.toString() + "["+
"name" + ":" + getName()+ "," +
"id" + ":" + getId()+ "]" + System.getProperties().getProperty("line.separator") +
" " + "student = "+(getStudent()!=null?Integer.toHexString(System.identityHashCode(getStudent())):"null")
+ outputString;
}
public String getId()
{
return id;
}
必需:
public void delete()
{
Student existingStudent = student;
student = null;
if (existingStudent != null)
{
existingStudent.delete();
}
}
public String toString()
{
return super.toString() + "["+
"name" + ":" + getName()+ "," +
"id" + ":" + getId()+ "]" + System.getProperties().getProperty("line.separator") +
" " + "student = "+(getStudent()!=null?Integer.toHexString(System.identityHashCode(getStudent())):"null");
}
public String getId()
{
return id;
}
答案 0 :(得分:1)
第一遍:
查找
.*outputString.*\R
替换为空字符串。
演示:
https://regex101.com/r/g3aYnp/2
第二遍:
查找
(toString\(\)[\s\S]+\))(\s*\R\s*?\})
替换:
$1;$2
答案 1 :(得分:1)
假设return
表达式的所需部分不包含任何半冒号(即;
),那么您可以在一次替换中执行此操作。搜索:
^ +String outputString = "";\R( +return [^;]+?)\R +\+ outputString;
并替换为:
\1;
我们的想法是一次性匹配所有三行,以保留想要的部分并添加;
。
这个替代品中有趣的一点。我的第一次尝试有... return [^;]+)\R +\+ ...
,但失败而... return [^;]+)\r\n +\+ ...
有效。 \R
版本似乎在最终;
之前留下了换行符。打开menu => 查看 => 显示符号 => 显示行结束表明,捕获组中的贪婪术语收集了\r
,\R
仅匹配\n
。更改为非贪婪表单允许\R
与整个\r\n
匹配。