如何从左到右连接多行字符串

时间:2013-04-20 03:14:05

标签: .net vb.net string join

我有一个包含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))

另一个更实际的例子,我真正需要的是组合存储在数组中的多行字符串(ASCII字母),但当我尝试将它们连接在一起时,我获得了一个从上到下连接的字符串:

enter image description here

我用过的代码:

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

1 个答案:

答案 0 :(得分:1)

这应该可以满足您的需求。关键是创建一个列表列表并拆分原始Array中每个项目的换行符。

这适用于任意数量的字符串,但每个字符串必须具有相同数量的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();
        }
    }
}