Java string.replace не работает как string.replaceAll

#java #string #sonarcloud

#java #строка #sonarcloud

Вопрос:

У меня есть запись, поступающая из базы данных в формате ниже. Сначала я использовал 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"}
 

Комментарии:

1. Используйте анализатор Json!!

2. У вас есть дополнительная кавычка в начале json

Ответ №1:

Ваша реальная проблема

JSON вообще не является обычным, вы не можете просто так с ним возиться. Вы должны использовать настоящий синтаксический анализатор JSON, и что бы ни дало вам это чудовищное искажение с обратной косой чертой, в этом и заключается настоящая ошибка. Проблема, с которой вы столкнулись здесь, может быть «исправлена», но ваш код останется хрупким беспорядком, пока вы не исправите эту основную проблему!

Ваш подход к SonarCloud

Вы не должны использовать подобные инструменты, если не понимаете, что они делают, и, учитывая, что вы задаете этот вопрос, не имея представления о том, почему SonarCloud даже предлагает вам заменить replaceAll на replace , похоже, этот совет применим к вам. Всегда читайте обоснование правила компоновки.

Проблема

.replaceAll заменяет каждое вхождение, но основано на регулярных выражениях. .replace заменяет каждое вхождение и не является — оно просто заменяет литеральную строку, которую вы пишете. Итак, все, что вам нужно сделать, это .replace("\", "") . Для replaceAll требуется 4 обратных косых черты, потому что это становится строкой с 2 обратными косыми чертами, которая является регулярным выражением для ‘1 обратной косой черты’.