簡體   English   中英

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

[英]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 解析器,無論給你這種反斜杠化的怪物是什么才是真正的錯誤所在。 您在這里面臨的問題可以“修復”,但在您解決這個潛在問題之前,您的代碼將保持脆弱的混亂狀態!

您使用 SonarCloud 的方法

您不應該使用這樣的工具,除非您了解它們的作用,並且考慮到您問這個問題而不知道為什么 SonarCloud 甚至建議您替換 replaceAll 來替換,聽起來這個建議適用於您。 始終閱讀 linting 規則背后的推理。

問題

.replaceAll替換每次出現,但基於正則表達式。 .replace替換每次出現,而不是 - 它只是替換您編寫的文字字符串。 所以,你需要做的就是.replace("\\\\", "") replaceAll 需要 4 個反斜杠,因為它變成了一個帶有 2 個反斜杠的字符串,這是“1 個反斜杠”的 regexp-ese。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM