【问题标题】:java regular expression find and replace multiple [duplicate]java正则表达式查找和替换多个[重复]
【发布时间】:2016-10-07 15:36:18
【问题描述】:

我正在尝试在我的代码库中使用正则表达式替换以下代码。

if(StringFunctions.isNullOrEmpty(employee.getName())){

//java code
}

新代码应该是:

If(StringUtils.isEmpty(StringUtils.trim(employee.getName()))){

//java code
}

我编写了以下代码来执行更新。

String regEx = "StringFunctions.isNullOrEmpty(.*)";
String replacement = "StringUtils.isEmpty(StringUtils.trim$1)";
textFromFile.replaceAll(regEx,pattern);

输出是:

If(StringUtils.isEmpty(StringUtils.trim(employee.getName())){)

//java code
}

我的代码有什么问题???请帮帮我

【问题讨论】:

  • 您的问题中有几个拼写错误,预期结果以“if”而不是“If”开头,并且在 replaceAll 中它不是模式而是替换
  • 这实际上是行不通的,因为你不知道在 StringFunctions.isNullOrEmpty() 中有多少括号

标签: java regex search replace


【解决方案1】:

在正则表达式中() 是捕获组。您的正则表达式模式不正确,因为您打算在其中放置文字括号,而您只放置了一个捕获组。

正确的正则表达式模式是:

"StringFunctions.isNullOrEmpty\\((.+)\\)"

\\((.+)\\) 表示匹配文字左括号,后跟(并捕获)1 个或多个任意字符,后跟文字右括号。

测试:

String textFromFile = "if(StringFunctions.isNullOrEmpty(employee.getName())){}";
String regEx = "StringFunctions.isNullOrEmpty\\((.+)\\)";
String replacement = "StringUtils.isEmpty(StringUtils.trim($1))";
String output = textFromFile.replaceAll(regEx,replacement);
System.out.println(output);

输入:

if(StringFunctions.isNullOrEmpty(employee.getName())){}

输出:

if(StringUtils.isEmpty(StringUtils.trim(employee.getName()))){}

【讨论】:

  • 下面的代码失败了。
  • if(!StringFunctions.isNullOrEmpty(employee.getName) && !StringFunctions.isNullOrEmpty(employee.getEmailId))
  • @venkat 如果您需要更复杂的解决方案,您可能需要使用正则表达式以外的方法来实现它。
猜你喜欢
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 2015-03-25
  • 2011-06-16
相关资源
最近更新 更多