我正在为域类编写一个 setter 。保存的是一个 xml,它是来自 Web 服务的响应。它包括用户的名字和姓氏,但需要屏蔽该信息。所以我试图使用正则表达式来实现这一点。
我编写了以下设置方法:
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) 您没有将替换的值分配回 xml
变量,2) 您正在显式替换匹配项,而您只需对值进行必要的修改即可已捕获返回它。
实际上,您甚至不需要捕获非空白字符 block ,您可以在replaceAll回调中访问整个匹配项。另外,您可以使用 \S
代替 [^\s]
。
使用
public void setOnlineRetroCreditResponse(String xml) {
onlineRetroCreditResponse = xml.replaceAll(/(?<=lastName=)\S+/){lastName ->
"X".multiply(lastName[0].size())
}
}
关于java - Setter 不替换字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56657839/