#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 обратной косой черты’.