(Я пришел из мира питонов, поэтому я извиняюсь, если в какой-то терминологии я использую банки с нормой.)
У меня есть String
со List
индексов начала и конца для замены. Не вдаваясь в подробности, рассмотрите этот базовый макет:
String text = "my email is [email protected] and my number is (213)-XXX-XXXX"
List<Token> findings = SomeModule.someFnc(text);
И у Token
есть определение
class Token {
int start, end;
String type;
}
Этот List
представляет начальную и конечную позиции чувствительных данных, которые я пытаюсь изменить.
Эффективно API возвращает данные, которые я перебираю, чтобы получить:
[{ "start" : 12, "end" : 22, "type" : "EMAIL_ADDRESS" }, { "start" : 41, "end" : 54, "type" : "PHONE_NUMBER" }]
Используя эти данные, моя конечная цель - отредактировать токены в text
указанном этими объектами Token
чтобы получить это:
"my email is [EMAIL_ADDRESS] and my number is [PHONE_NUMBER]"
То, что делает этот вопрос нетривиальным, заключается в том, что подстроки замены не всегда имеют ту же длину, что и подстроки, которые они заменяют.
Мой текущий план действий состоит в том, чтобы построить StringBuilder
из text
, отсортировать эти идентификаторы в обратном порядке от начальных индексов, а затем заменить с правого конца буфера.
Но что-то говорит мне, что должен быть лучший способ... есть?