将2个文本框内容与分隔符组合

本文关键字:分隔符 组合 2个 文本 | 更新日期: 2023-09-27 18:02:04

我遇到了一点问题。假设我有两个文本框,其中一个在左边,内容如下:

Win
Lose
Hello
Goodbye

右边的一个,上面有这个信息:

One
Two
Three
Four

现在,在按下按钮时,我想将这两个文本框与冒号定界结合起来,所以它的输出如下:

Win:One
Lose:Two
Hello:Three
Goodbye:Four

知道我该怎么做吗?到目前为止,我所尝试的一切都没有奏效。这是我当前的代码,对不起。我不是想让你帮我工作,我只是很困惑:

string path = Directory.GetCurrentDirectory() + @"'Randomized_List.txt";
string s = "";
StringBuilder sb = new StringBuilder();
StreamReader sr1 = new StreamReader("Randomized_UserList.txt");
string line = sr1.ReadLine();
while ((s = line) != null)
{
   var lineOutput = line+":";
   Console.WriteLine(lineOutput);
   sb.Append(lineOutput);
}
sr1.Close();
Console.WriteLine();
StreamWriter sw1 = File.AppendText(path);
sw1.Write(sb);
sw1.Close();

将2个文本框内容与分隔符组合

这里有一种可能适用于您的不同方法。

您可以通过在换行符上进行拆分来生成两个字符串数组。

var tb1 = textBox1.Text.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
var tb2 = textBox2.Text.Split(new[] { Environment.NewLine }, StringSplitOptions.None);

然后使用LINQ的Zip()方法将它们组合成一个新的列表。每个列表中的第一个元素被组合,然后是每个列表中第二个元素,依此类推…

var combined = tb1.Zip(tb2, (s1, s2) => string.Format("{0}:{1}", s1, s2));

为了使其工作,两个TextBox必须具有相同数量的行。如果它们不同,那么Zip将不起作用。

下面的代码演示了一种拆分字符串然后连接它们的方法。一开始我误解了这个问题

string left = string.Format("Win{0}Lose{0}Hello{0}Goodbye", Environment.NewLine);
string right = string.Format("One{0}Two{0}Three{0}Four", Environment.NewLine);
string[] leftSplit = left.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
string[] rightSplit = right.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
string output = "";
if (leftSplit.Length == rightSplit.Length)
{
    for (int i = 0; i < leftSplit.Length; i++)
    {
        output += leftSplit[i] + ":" + rightSplit[i] + Environment.NewLine;
    }
}

如果这是一个winforms应用程序,您可以利用Lines属性来执行以下操作。

var tb1 = this.textBox1.Lines.Select((line, index) => new { Line = line, Index = index });
var tb2 = this.textBox2.Lines.Select((line, index) => new { Line = line, Index = index });
var q = from t1 in tb1
        join t2 in tb2 on t1.Index equals t2.Index
        select string.Format("{0}:{1}", t1.Line, t2.Line);
this.textBox3.Lines = q.ToArray();
textbox1.Text.Split("'n").Zip(texbox2.Text.Split("'n"),(s1,s2)=>s1+":"+s2).Aggregate("",(a,s)=>a+s+"'n")

Split方法通过使用参数中的字符(本例中为新行(对字符串进行拆分,将其调用所代表的字符串转换为字符串数组。

在这个动作中,我们必须从文本框1和文本框2中选择行数组。

现在我们使用任何IEnumerable的Zip方法(这是Aggregate方法的扩展方法(。Zip方法的结果是一个包含元素的IEnumerable,这些元素是使用参数中传递的函数从我们提到的两个IEnumerables合并而来的,在这种情况下,它是(s1,s2(=>s1+":"+s2。

目前,我们有一些IEnumerable,它将元素作为两个文本框中的合并行。我们现在需要做的是使用Aggregate函数将它们合并为一个字符串。它是一个从第一个参数开始构建结果的函数,对于每个元素,它采用最后一步的结果并返回新值,该值是前一个结果和当前元素的某种聚合

您可以按以下方式通过换行符拆分字符串:

string[] lines = theString.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);

我认为您应该像这样拆分两个TextBox的内容,然后(如果生成的arrray大小相同(,用分号连接相应的字符串(第一个数组中的第一个字符串与第二个数组中第一个字符串,第一个数组的第二个字符串与来自第二个阵列的第二字符串,等等(。

例如:

var lines1 = textBox1.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
var lines2 = textBox2.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
string result = String.Empty;
if (lines1.Length == lines2.Length)
{
   for(int i=0; i< lines1.Length; ++i)
   {
       result += lines1[i] + ":" + lines2[i] + Environment.NewLine;
   }
}