java string.replace不作为string.replaceall工作

cwxwcias  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(347)

我有一个来自数据库的条目,格式如下。我第一次使用replaceall而不是replace函数,但显示错误并要求从replaceall更改为replace。然而,replace并不能替换所有的反斜杠,事实上它并没有改变文本中的任何内容。
java代码中的数据库条目:

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

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

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

为了让sonarcloud满意,我尝试将replaceall改为replace,这反过来又告诉be删除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\"}
jhdbpxl9

jhdbpxl91#

你真正的问题

json一点都不规则,你不能就这样乱来。你应该使用一个真正的json解析器,不管是什么给了你这个反斜杠的怪物,都是真正的bug所在。您在这里面临的问题可以“修复”,但在您修复这个根本问题之前,您的代码将仍然是一个脆弱的烂摊子!

你对云的态度

你不应该使用这样的工具,除非你了解它们的功能,如果你问这个问题的时候不知道为什么sonarcloud甚至建议你用replaceall来替换,听起来这个建议对你很适用。一定要读一条细线规则背后的道理。

问题 .replaceAll 替换每个引用,但基于正则表达式。 .replace 替换每次出现的内容,而不是-它只是替换您编写的文本字符串。所以,你要做的就是 .replace("\\", "") . replaceall需要4个反斜杠,因为这将成为一个包含2个反斜杠的字符串,即regexp ese表示“1反斜杠”。

相关问题