首先,很抱歉标题不好,因为我无法在不给出示例的情况下描述问题。
假设我有一个原始字符串,并且有两个其他字符串替换该字符串中的实例。因此,例如:
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)。
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);
}
参见现场演示。