如何将字符串中的差异合并为一个

问题描述 投票:0回答:1

假设我有一个原始字符串,并且有两个其他字符串替换该字符串中的实例。例如:

  • 我原来的字符串A将是
    Hello, how are you?
  • 然后,字符串 B 将是
    !%$£*, how are you?
    (将“Hello”替换为“!%$£*”)。
  • 另一个字符串 C 将是
    Hello, how are ^&%?
    (用“^&%”替换“you”。)

我实际上也应该问一下这种情况,如果我们可以拥有最多 N 个字符串,则这是否可能,其中 N 是“单词”的数量(如果您愿意在该字符串中)。因此,例如,另一个字符串 D 可能是

Hello, !*& are you?
(用
!*&
替换“how”),那么这意味着合并结果将是
!%$£*, !*& are ^&%?

我想对所有这些字符串做的是创建一个最终的合并结果,它等于

!%$£*, how are ^&%?

在此问题中,替换将是随机标点符号的随机字符串(请参阅 Grawlix),并且生成的每个替换都不会保留其替换(因此“!%$£*”不会映射为“Hello”的绝对替换) .

因此,调用此函数 mergeDiffStrings,这将是另一个示例输出...

mergeDiffStrings("I am $%^*", "! am fine") -> "! am $%^*"

现在,我正在尝试使用 Google 的 diff-match-pattern 库 来查找差异,但我在实际合并方面有点困难。

我需要一些帮助来解决这个问题 - 即使是指出如何更好地指定它也会很棒。

java string replace merge google-diff-match-patch
1个回答
0
投票

诀窍是您必须逐个字符进行转换(而不是先按字符串 B 再按 C)。

String mergeDiffStrings(String a, String b, String c) {
    StringBuilder sb = new StringBuilder(a);
    for (int i = 0; i < a.length(); i++) {
        if (b.charAt(i) != a.charAt(i)) {
            sb.setCharAt(i, b.charAt(i));
        } else if (c.charAt(i) != a.charAt(i)) {
            sb.setCharAt(i, c.charAt(i));
        }
    }
    return sb.toString();
}

参见现场演示

© www.soinside.com 2019 - 2024. All rights reserved.