Java string.replace 不能作为 string.replaceAll 工作

Shr*_*shi 3 java string sonarcloud

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

用java代码从数据库中输入:

""{\"id\":\"5947223f-9c50-425f-950b-e126c94b3adf\",\"name\":\"shruti\"}
Run Code Online (Sandbox Code Playgroud)

使用 replaceAll 我编写的代码如下,工作正常:

abcString.replaceAll("\\\\", "").replaceFirst("\"","");
Run Code Online (Sandbox Code Playgroud)

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

具有替换功能的代码:

abcString.replace("\\\\", "")
Run Code Online (Sandbox Code Playgroud)

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

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

rzw*_*oot 8

你真正的问题

JSON 根本不是常规的,你不能像这样把它弄乱。你应该使用一个真正的 JSON 解析器,无论给你这种反斜杠化的怪物,才是真正的错误所在。您在这里面临的问题可以“修复”,但在您解决这个潜在问题之前,您的代码将保持脆弱的混乱状态!

您使用 SonarCloud 的方法

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

问题

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