C#字符串/数组替换

时间:2018-09-21 18:09:21

标签: c# arrays string replace

这有点难以解释,但我会尽力而为。

所以我想有3个文本框。

文本框1(输入):“ X:Y:Z”

文本框2(输入):“ A:B”

文本框3(输出):

现在我要比较Y和A的每一行。TextBox1中的每一行看起来像这样: “ ABC:123:DEF” 现在应该将其拆分为123并将其与A进行比较,A也将从B中拆分出来。

如果相等,则应在TextBox3中给出:X:B:Z 如果没有,则不应在TextBox3中显示出来。

示例:

TB1: abc:123:def 
TB2: 123:bla 
TB3: abc:bla:def
------      
TB1: abc:741:def 
TB2: 345:bla 
TB3: no output

这就是我得到的:

private void button1_Click(object sender, EventArgs e)
{
    var textToReplace = textBox1.Text.Split(':');
    var replacementArray = textBox2.Text.Split(':');

    if (replacementArray.Length == 2)
    {
        textBox3.Clear();

        for (var i = 0; i < textToReplace.Length; i++)
        {
            if (i > 0)
            {
                textBox3.AppendText(":");
            }

            textBox3.AppendText(textToReplace[i].Replace(replacementArray[0], 
            replacementArray[1]));
        }
    }
}

用于1行工作的IMG:

对于第一行,它工作得很好,但对于随后的那行却不是。 感谢所有帮助!

3 个答案:

答案 0 :(得分:1)

我不确定要实现什么。我是这样理解的:

  1. 在文本框1中,您需要替换一些带有令牌的字符串。

  2. 在第一个文本框中,您具有令牌,并且在:较强后可以插入令牌位置。

  3. 文本框3正在显示结果。

基本上,您想执行字符串替换。我说的对吗?

示例代码:

var input = textBox1.Text;
var tokenArr = textBox2.Text.Split(":");
var output = input.Replace(tokenArr[0], tokenArr[1]);
textBox3.Text = output;

答案 1 :(得分:0)

我觉得您的代码可以按您的意愿工作...除非没有匹配项,否则它将输出原始字符串而不是“无”。所以添加...

if (textBox1.Text == textBox3.Text) 
    textBox3.Text = "";

答案 2 :(得分:0)

您在文本框2中拥有一本字典,因此将其放入其中,然后对于tb1的每一行都可以搜索正确的值。

string tb1 = @"abc:123:def
abc:741:def2
xxx:345:bla3";
string tb2 = @"123:bla
345:bla2";
string tb3="";

var repDic = new Dictionary<string,string>();
foreach(var line in tb2.Split(new string[]{Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries))
{
    var spl = line.Split(':');
    if(!repDic.ContainsKey(spl[0]))
    {
        repDic.Add(spl[0],spl[1]);
    }
}

StringBuilder sb = new StringBuilder();
foreach(var line in tb1.Split(new string[]{Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries))
{
    var spl = line.Split(':');
    string val;
    if(repDic.TryGetValue(spl[1],out val))
    {
        sb.AppendLine($"{spl[0]}:{val}:{spl[2]}");
    }

}
tb3 = sb.ToString();

TextBox3输出:

abc:bla:def
xxx:bla2:bla3