Сеттер не заменяет символы в строке - PullRequest
0 голосов
/ 19 июня 2019

Я пишу установщик для класса домена. Сохраняется XML-файл, являющийся ответом веб-службы. Он включает имя и фамилию пользователя, но эта информация должна быть замаскирована. Поэтому я пытаюсь достичь этого с помощью регулярных выражений.

Я написал следующий метод установки:

public void setOnlineRetroCreditResponse(String xml) {
        xml.replaceAll (/(?<=lastName=)([^\s]+)/){lastName ->
        lastName[0].replace ( lastName[1], "X".multiply (lastName[1].size()))
        }
    onlineRetroCreditResponse = xml
    }

Я ожидаю, что будет показано следующее: «FFPAccountNumber2 = 12345 lastName = Doe», которое будет заменено и сохранено в базе данных, например, «FFPAccountNumber2 = 12345 lastName = XXX», но оно не работает должным образом. Я проверил свое регулярное выражение, используя другой онлайн, как этот https://www.freeformatter.com/java-regex-tester.html, и это, похоже, не проблема.

Любые идеи будут оценены.

1 Ответ

1 голос
/ 19 июня 2019

Есть две вещи: 1) вы не присваиваете замененное значение обратно переменной xml и 2) вы явно заменяете совпадение, в то время как вы можете просто внести необходимые изменения в захваченное значение, чтобы вернуть его .

На самом деле вам даже не нужно захватывать блок непробельных символов, вы можете получить доступ ко всему совпадению в обратном вызове replaceAll. Также вы можете использовать \S вместо [^\s].

Используйте

public void setOnlineRetroCreditResponse(String xml) {
    onlineRetroCreditResponse = xml.replaceAll(/(?<=lastName=)\S+/){lastName ->
      "X".multiply(lastName[0].size()) 
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...