可以标记为重复,但我还没有找到适合的解决方案。
我需要编写一个逐字比较2个文本的函数,并打印出显示添加/删除/更改的单词的文本。例如:
StringOriginal ="我是蒂姆,我27岁"
StringEdited ="我是金,我不是那么老"。
结果:我 Tim Kim和我 27岁不是那么老。
我发现的大多数diff算法倾向于通过char比较char。这样可以正常工作,直到你在相同的索引上有两个不同的单词,并且有相互的字符。
"我是蒂姆"编辑到 "我是Kim" 结果成:
我 T Kim
而不是
我 Tim Kim。
任何指针?
答案 0 :(得分:0)
按空格分割StringOriginal和StringEdited。循环遍历StringOriginal的每个单词,将其与Edited中的相同单词索引进行比较。每个不相等的单词都应该放在一个临时变量中,并且只有当你从循环中再次得到相同的单词时才将它连接到结果中。使用StringBuilder创建结果。希望这有帮助
答案 1 :(得分:0)
按空格分割两个字符串,通过Union连接生成的数组,然后返回到字符串,如下所示:
string[] arr1 = str1.Split(' ');
string[] arr2 = str1.Split(' ');
var merged = arr1.Union(arr2).ToArray<string>();
var mergedString = string.Join(' ', merged);
答案 2 :(得分:0)
string StringOriginal = "I am Tim and I am 27 years old";
string StringEdited = "I am Kim and I am not that old";
string[] StringOriginalArray = StringOriginal.Split();
string[] StringEditedArray = StringEdited.Split();
string[] newStringArray = new string[StringOriginalArray.Length + StringEditedArray.Length];
int i = 0;
int io = 0;
int ie = 0;
while (i < newStringArray.Length)
{
if (io < StringOriginalArray.Length)
{
newStringArray[i] = StringOriginalArray[io];
io++;
i++;
}
if (ie < StringEditedArray.Length)
{
newStringArray[i] = StringEditedArray[ie];
ie++;
i++;
}
}
string[] finalArray = new string[newStringArray.Length];
int f = 0;
for (int k = 0; k < newStringArray.Length; k=k+2)
{
finalArray[f++] = newStringArray[k];
if (newStringArray[k] != newStringArray[k+1])
{
finalArray[f++] = newStringArray[k+1];
}
}
Console.WriteLine(String.Join(" ", finalArray));
输出:
"I am Tim Kim and I am 27 not years that old"
答案 3 :(得分:0)
我自己正在寻找这个问题的答案。 一直找不到一个好的解决方案。 提出了以下内容。但这并不完美。
interface IImageUrls {
regular: string;
}