java - 替换字符串中的提及
问题描述
我写了一个算法,它获取表单的条目列表(word,(lower,upper))
作为输入,并且应该替换范围内的文本中的(lower,upper)
提及word
。
示例:
文本:“高斯是一位德国数学家。” 1. ("He",(0,3)), 2. ("physicist",(18,29))
结果:“他是德国物理学家。”
不幸的是,我在我的算法中没有发现错误。
private static String substituteByOffset(String text, List<Pair<String, Pair<Integer, Integer>>> mentions) {
int offset = 0;
for (Pair<String, Pair<Integer, Integer>> entry : mentions) {
String subst = entry.first;
Pair<Integer, Integer> offsets = entry.second;
Integer lower = offsets.first;
Integer upper = offsets.second;
text = text.substring(0, lower + offset) + subst + text.substring(upper + offset, text.length());
offset = subst.length() - (upper - lower);
}
return text;
}
解决方案
substring(int beginIndex, int endIndex) 返回一个新字符串,它是该字符串的子字符串。子字符串从指定的 beginIndex 开始并延伸到索引 endIndex - 1 处的字符。因此子字符串的长度是 endIndex-beginIndex。
因此:
"Gauß was a german mathematican.".substring(0,3) : "Gau"
"Gauß was a german mathematican.".substring(0,4) : "Gauß"
尝试使用这些输入1. ("He",(0,3)), 2. ("physicist",(18,29))
结果如下:
“他ß是德国物理学家n。”
下面的输入将给出正确的结果:
String text = "Gauß was a german mathematican.";
List<Pair<String, Pair<Integer, Integer>>> mentions = Arrays.asList(
new Pair("He", new Pair<Integer, Integer>(0,4)),
new Pair("physicist", new Pair<Integer, Integer>(18,30)));
substituteByOffset(text, mentions); // prints "He was a german physicist."
推荐阅读
- git - npm run deploy 时控制台返回错误
- python - 尝试获取数据的问题
- python - 输入以检查是否有人输入了低于 10 的东西,然后循环它直到他们输入高于 10 的输入,然后继续
- docker - 使用带有上下文的 Docker YML 文件到父级 (..) 在 WSL2 下构建需要太长时间
- reactjs - React:如果用户已登录,如何重定向到另一个 url?
- json - PowerBI - API 返回空 JSON
- javascript - 依赖添加项目
- google-cloud-platform - 监控 Cloud Composer 气流 UI
- amazon-web-services - AWS Route 53 连接到 S3 状态 Web 主机
- firebase - 不确定在 Flutter 或 Dart 中需要将 await 关键字应用于哪个语句