c#与字符串的联合
本文关键字:字符串 | 更新日期: 2023-09-27 17:53:59
我有两个字符串(确切的文件路径),像这样:
C: ' aaaa ' bbbb '预备
和
预备' dddd。
我想用联合操作合并两个字符串。
获取:
C: ' aaaa ' bbbb '预备' dddd
怎么做?我没有找到这个的字符串方法。你认为我在好的方向搜索还是我应该尝试另一种方法(分割字符串…)?
谢谢
这个怎么样:
var path1 = @"C:'aaaa'bbbb'cccc";
var path2 = @"cccc'dddd";
var x = string.Join(
new string(Path.DirectorySeparatorChar, 1),
path1.Split(Path.DirectorySeparatorChar)
.Concat(path2.Split(Path.DirectorySeparatorChar))
.Distinct()
.ToArray());
// path1 = C:'aaaa'bbbb'cccc
// path2 = cccc'dddd
// result = C:'aaaa'bbbb'cccc'dddd
// path1 = C:'aaaa'bbbb'cccc'dddd
// path2 = cccc'dddd
// result = C:'aaaa'bbbb'cccc'dddd
这可以让您开始。有很多情况下你可以进行CYA,但本质上是找到字符串2与字符串1重叠的地方,然后将它们连接起来。
public static void Main()
{
string one = @"C:'aaaa'bbbb'cccc";
string two = @"cccc'dddd";
int overlapIndex = one.IndexOf(two.Split('''').First());
string three = one.Substring(0, overlapIndex) + two;
Console.WriteLine(three);
// "C:'aaaa'bbbb'cccc'dddd"
}
我认为已经有一些很好的解决方案,只是为了我自己的参考,我做了一个函数,在任何两个字符串上这样做。对不起,它有点臃肿。
public string Union(string one, string two)
{
if (one == null || two == null)
return null;
int idxOne = -1;
int j = one.Length - 1;
for (int i = two.Length - 1; i >= 0; i--)
{
if (two[i] == one[j]) // if the current index of string 2 matches the last character of string one, start counting
{
j--;
idxOne = j;
}
else if (i > 0)
{
j = one.Length - 1; // throw away results if match stopped matching half-way in.
idxOne = -1;
}
}
if (idxOne != -1)
{
return one.Substring(0, idxOne + 1) + two;
}
return one + two;
}