假设我有一个原始字符串,并且有两个其他字符串替换该字符串中的实例。例如:
Hello, how are you?
!%$£*, how are you?
(将“Hello”替换为“!%$£*”)。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 库 来查找差异,但我在实际合并方面有点困难。
我需要一些帮助来解决这个问题 - 即使是指出如何更好地指定它也会很棒。
诀窍是您必须逐个字符进行转换(而不是先按字符串 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();
}
参见现场演示。