设置器不替换字符串上的字符

时间:2019-06-18 22:30:31

标签: java regex grails groovy

我正在为域类编写设置器。保存的是XML,它是Web服务的响应。它包括用户的名字和姓氏,但该信息需要屏蔽。因此,我正在尝试使用正则表达式来实现这一目标。

我编写了以下setter方法:

public void setOnlineRetroCreditResponse(String xml) {
        xml.replaceAll (/(?<=lastName=)([^\s]+)/){lastName ->
        lastName[0].replace ( lastName[1], "X".multiply (lastName[1].size()))
        }
    onlineRetroCreditResponse = xml
    }

我期望像这样的字符串:“ FFPAccountNumber2 = 12345 lastName = Doe”将被替换并保存到数据库中,例如“ FFPAccountNumber2 = 12345 lastName = XXX”,但这种方式无法正常工作。我使用类似https://www.freeformatter.com/java-regex-tester.html的其他在线方式测试了我的正则表达式,但这似乎不是问题。

任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

有两件事:1)您没有将替换后的值分配回xml变量; 2)您正在显式替换匹配项,而您只需对捕获的值进行必要的修改即可退回它。

实际上,您甚至不需要捕获非空格字符块,您可以在replaceAll回调中访问整个匹配项。另外,您可以使用\S代替[^\s]

使用

public void setOnlineRetroCreditResponse(String xml) {
    onlineRetroCreditResponse = xml.replaceAll(/(?<=lastName=)\S+/){lastName ->
      "X".multiply(lastName[0].size()) 
   }
}