c#与字符串的联合

本文关键字:字符串 | 更新日期: 2023-09-27 17:53:59

我有两个字符串(确切的文件路径),像这样:

C: ' aaaa ' bbbb '预备

预备' dddd。

我想用联合操作合并两个字符串。

获取:

C: ' aaaa ' bbbb '预备' dddd

怎么做?我没有找到这个的字符串方法。你认为我在好的方向搜索还是我应该尝试另一种方法(分割字符串…)?

谢谢

c#与字符串的联合

这个怎么样:

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;
    }