【发布时间】:2018-11-27 23:38:10
【问题描述】:
(我来自 python 世界,所以如果我在规范中使用 jar 的某些术语,我深表歉意。)
我有一个 String 和一个 List 的开始/结束索引要替换。无需过多详细介绍,请考虑以下基本模型:
String text = "my email is foo@bar.com 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]"
使这个问题变得不平凡的原因是替换子字符串的长度并不总是与它们要替换的子字符串相同。
我目前的行动计划是从text 构建一个StringBuilder,按照起始索引的相反顺序对这些ID 进行排序,然后从缓冲区的右端进行替换。
但有件事告诉我应该有更好的方法......有吗?
【问题讨论】:
-
等等...您开始是一个包含电子邮件地址的字符串,并且您想用令牌替换该地址?对吗?
-
我可能会采用对所有字符串进行标记的方法,然后提供一个存储原始字符串及其替换的类 - 从中很容易重建为编辑版本的原始版本
-
@TimBiegeleisen 是的,我正在实施 PII 编辑器。
-
@rustyx 是的,完全正确。
List<Token>列表按起始索引升序排序。 -
@jpmc26 我不想构建任何东西。有一个 API 可以嗅出敏感信息并返回可能的匹配项。我正在阅读那些匹配对象并手动编辑字符串。字符串替换没什么大不了的?
标签: java string stringbuilder