Setter 不替换字符串中的字符

Setter not replacing charactes on string

我正在为域 class 编写 setter。保存的是一个 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) 您没有将替换的值分配回 xml 变量,以及 2) 您正在显式替换匹配项,同时您可以对您拥有的值进行必要的修改拍到return吧。

实际上,您甚至不需要捕获 non-whitespace 个字符块,您可以在 replaceAll 回调中访问整个匹配项。此外,您可以使用 \S 而不是 [^\s]

使用

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