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

问题描述 投票: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)。

public static void main (String[] args) {
    String A = "Hello, how are you?";
    String B = "!%$£*, how are you?";
    String C = "Hello, how are ^&%?";
    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));
        }
    }
    String result = sb.toString();
    System.out.println(result);
}

参见现场演示

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.