Java string.replace 不作为 string.replace 所有

Java string.replace not working as string.replaceAll

我有一个来自数据库的条目,格式如下。我首先使用 replaceAll 而不是 replace 函数,但 SonarCloud 显示错误并要求从 replaceAll 更改为 replace。但是,替换不会替换所有反斜杠,实际上它不会更改文本中的任何内容。

java 代码中的数据库条目:

""{\"id\":\"5947223f-9c50-425f-950b-e126c94b3adf\",\"name\":\"shruti\"}

我用 replaceAll 编写了如下代码,效果很好:

abcString.replaceAll("\\", "").replaceFirst("\"","");

为了让 SonarCloud 满意,我尝试将 replaceAll 更改为 replace,这反过来又告诉我要删除 replaceFirst 方法,否则它会从数据库输出中删除双引号。

具有替换功能的代码:

abcString.replace("\\", "")

我尝试的第二件事给出了错误:

Unexpected character ('\' (code 92)): was expecting double-quote to start field name
!  at [Source: (String)"{\"id\":\"5947223f-9c50-425f-950b-e126c94b3adf\",\"name\":\"shruti\"}

你真正的问题

JSON根本不是正则,不能就这么乱来。您应该使用真正的 JSON 解析器,无论什么给您这种反斜杠化的怪物,都是真正的错误所在。您在这里面临的问题可能是 'fixed',但在您解决这个潜在问题之前,您的代码将仍然是一团糟!

您对 SonarCloud 的态度

你不应该使用这样的工具,除非你了解它们的作用,并且考虑到你问这个问题时不知道为什么 SonarCloud 甚至建议你替换 replaceAll 来替换,这听起来像这个建议适用给你。始终阅读 linting 规则背后的原因。

问题

.replaceAll 替换每个匹配项,但基于正则表达式。 .replace 替换了每一个出现的地方,但不是——它只是替换了你写的文字字符串。所以,你需要做的就是.replace("\", "")。 replaceAll 需要 4 个反斜杠,因为它变成了一个带有 2 个反斜杠的字符串,这是“1 个反斜杠”的正则表达式。