java - 替换字符串中的提及

标签 java string

我编写了一个算法,它获取 (word,(lower,upper)) 形式的条目列表作为输入,并应该替换 范围内的文本中的提及内容(下、上)word
示例:
文本:“高斯是一位德国数学家。” 1. ("他",(0,3)), 2. ("物理学家",(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) Returns a new string that is a substring of this string. The substring begins at the specified beginIndex and extends to the character at index endIndex - 1. Thus the length of the substring is 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.(“物理学家”,(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."

关于java - 替换字符串中的提及,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53159977/

相关文章:

java - 分割字符串,并得到某个单词

java - 无法使用 EWS Java API 发送电子邮件

java - 并发HashMap : Can we trust on it?

java - WebSphere Liberty Core 抛出 java.io.IOException : Stream is closed

c++ - 如何使用字符串和整数获取汽车类的整数结果

java - 以更有效的方式替换字符串中的一组子字符串?

c - 用 C 处理 microhttp 服务器中的 POST 数据

string - 在文件中查找转义字符

python - 单引号字符串与双引号字符串

c++ - 按指定的分隔符拆分 wstring