2015-06-05 3 views
2

У меня есть 2 строки (файлы путь точно), как это:C# союза шпагат

C: \ аааа \ BBBB \ сссс

и

сссса \ дддд.

Я хотел бы объединить две строки с помощью операции объединения.

Для получения:

C: \ аааа \ BBBB \ сссс \ дддд

Как это сделать? Я не нахожу для этого строковый метод. Как вы думаете, я ищу в хорошем направлении, или я должен попробовать другим способом (split string ...)?

Thanks

+0

В ваших примерах результатов, я думаю, вам не хватает последнего 'c'. – adv12

+1

Откуда вы знаете его последний;) – Ralf

+0

Посмотрите строку 'concatenation'. – MyCodeSucks

ответ

4

Как об этом:

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 
4

это может помочь вам. Там много сценариев, в которых вы могли бы 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" 
} 
2

Я думаю, что есть некоторые хорошие решения уже, как раз для моей ссылки я сделал функцию, которая делает это на любых двух строк. Извините, что он получил разлад.

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

Не удается найти уникальные пути. Союз для 'C: \ aaaa \ bbbb' и' cccc \ dddd' приводит к 'C: \ aaaa \ bbbbcccc \ dddd'. – rageit

+0

, потому что bbbb и cccc не совпадают, эта функция не была написана специально для путей – Fixation

Смежные вопросы