java - Setter 不替换字符串中的字符

标签 java regex grails groovy

我正在为域类编写一个 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/

相关文章:

exception - grails异常:标记[paginate]缺少必需的属性[total]

grails - 为什么此Grails下载行为异常?

grails - 如何在 grails 1.3.7 中记录 sql

java - 尝试使用 spring 部署 liferay portlet 时出现异常

java - java spring : @Transactional(propagation = Propagation. 中的并发需要,隔离 = Isolation.SERIALIZABLE) 不工作

.net - 正则表达式匹配所有

objective-c - NSRegularExpression 从 numberOfRanges 方法给出了错误的结果

java - 哪个 Eclipse 版本与 Tomcat 10 兼容,或者我应该返回 Tomcat 9?

java - Sphinx4:如何提高对话框演示中识别WAV文件的准确性

java - 正则表达式替换为 Stream