我正在为域类编写设置器。保存的是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的其他在线方式测试了我的正则表达式,但这似乎不是问题。
任何想法都会受到赞赏。
答案 0 :(得分:1)
有两件事:1)您没有将替换后的值分配回xml
变量; 2)您正在显式替换匹配项,而您只需对捕获的值进行必要的修改即可退回它。
实际上,您甚至不需要捕获非空格字符块,您可以在replaceAll回调中访问整个匹配项。另外,您可以使用\S
代替[^\s]
。
使用
public void setOnlineRetroCreditResponse(String xml) {
onlineRetroCreditResponse = xml.replaceAll(/(?<=lastName=)\S+/){lastName ->
"X".multiply(lastName[0].size())
}
}