2013-04-20 2 views
1

У меня есть массив с 3 элементами.Как присоединиться к многострочным строкам слева направо

Первая запись массива многострочный строка:

"My dog 
you   " 

Второй элемент также:

" dont like that 
       " 

И Hird запись тоже:

" ...  
will die!  " 

Теперь, как я могу объединить все многострочные строки, чтобы получить эту объединенную строку слева направо:

My dog dont like that...  
you will die! 

Что я пробовал:

RichTextBox1.Text = String.Join(MyArray(1), MyArray(2)) 

Ну еще один пример более reallistic, что мне действительно нужно объединить многострочные строки (которые являются ASCII буквы), хранящиеся в массиве, но когда я пытаюсь присоединиться к нему все вместе я получаю строку соединенных сверху вниз:

enter image description here

код, который я использовал:

RichTextBox1.Text = String.Join(" ", Characters(70), Characters(77), Characters(70), Characters(76)) 
+1

Читайте каждый. Разделить на то, что вызывает многострочный. Добавьте первый в StringBuilder 1 и второй в StringBuilder 2. Когда закончите, добавьте StringBuilder 2 в StringBuilder 1. – Paparazzi

+0

@Bam спасибо за комментарий, прежде чем спрашивать здесь, я попытался разделить char (vbcrlf), но затем я получил полную объединенную строку в одной строке. – ElektroStudios

+1

Возможно, вам понадобится записать каждый символ в Int Hex, чтобы узнать, что используется. Попробуйте envrionment.newline. – Paparazzi

ответ

1

Это должно получить то, что вам нужно. Ключом был создание списка списков и разбиение на символ новой строки для каждого элемента в исходном массиве.

Это должно работать для произвольного количества строк, но каждая строка должна иметь одинаковое количество символов NewLine для разрыва.

Например:

"Yo \nDon't kill \nMan!" 
"dude! \nme bro!  " 

Это вызовет исключение, потому что вторая линия имеет только один \n

Чтобы исправить это вторая линия может быть изменен на:

"Yo \nDon't kill \nMan!" 
"dude! \nme bro!  \n" 

Этом должен дать вам правильное форматирование.

В VB:

Imports System.Text 
Module Module1 

    Sub Main() 
     Dim items As List(Of String) = New List(Of String)() 
     items.Add("My dog\nyou") 
     items.Add(" dont like that\n") 
     items.Add(" ...  \n will die!") 
     Dim list As List(Of List(Of String)) = New List(Of List(Of String)) 
     Dim arg() As String = {"\n"} 
     For Each listItem As String In items 
      list.Add(listItem.Split(arg, StringSplitOptions.None).ToList()) 
     Next 

     Dim sb As StringBuilder = New StringBuilder() 

     For i As Integer = 0 To list(0).Count - 1 
      For j As Integer = 0 To list.Count - 1 
       sb.Append(list(j)(i)) 
      Next 
      sb.Append(Environment.NewLine) 
     Next 

     Console.WriteLine(sb.ToString()) 
     Console.ReadKey() 
    End Sub 
End Module 

И C# (мое предпочтение, но это все хорошо :)):

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      List<string> items = new List<string>(); 
      items.Add("My dog\nyou"); 
      items.Add(" dont like that\n"); 
      items.Add(" ...  \n will die!"); 
      List<List<string>> list = new List<List<string>>(); 
      items.ForEach(f => list.Add(f.Split('\n').ToList())); 
      StringBuilder sb = new StringBuilder(); 

      for (int i = 0; i < list[0].Count; i++) 
      { 
       for (int j = 0; j < list.Count; j++) 
       { 
        sb.Append(list[j][i]); 
       } 
       sb.Append(Environment.NewLine); 
      } 

      Console.WriteLine(sb.ToString()); 
      Console.ReadKey(); 
     } 
    } 
} 
Смежные вопросы