C#字符串/数组替换

C#字符串/数组替换,c#,arrays,string,replace,C#,Arrays,String,Replace,这很难解释,但我会尽力的 所以我想要3个文本框 文本框1(输入):“X:Y:Z” 文本框2(输入):“A:B” 文本框3(输出): 现在,对于每一行,我要比较Y和A。TextBox1中的每一行如下所示: “ABC:123:DEF” 现在它应该拆分出123,并将其与A进行比较,A也是从B中拆分出来的 如果等于,则应在文本框3:X:B:Z中给出 如果不是,它不应该在文本框3中给出它 示例: TB1: abc:123:def TB2: 123:bla TB3: abc:bla:def ------

这很难解释,但我会尽力的

所以我想要3个文本框

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

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

文本框3(输出):

现在,对于每一行,我要比较Y和A。TextBox1中的每一行如下所示: “ABC:123:DEF” 现在它应该拆分出123,并将其与A进行比较,A也是从B中拆分出来的

如果等于,则应在文本框3:X:B:Z中给出 如果不是,它不应该在文本框3中给出它

示例:

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]));
        }
    }
}
private void按钮1\u单击(对象发送者,事件参数e)
{
var textToReplace=textBox1.Text.Split(“:”);
var replacementArray=textBox2.Text.Split(“:”);
if(replacementArray.Length==2)
{
textBox3.Clear();
对于(var i=0;i0)
{
textBox3.附录文本(“:”);
}
textBox3.AppendText(textToReplace[i].Replace(replacementArray[0],
替换数组[1]);
}
}
}
单线作业的IMG:

对于第一行,它工作得很好,但对于下面的行则不行。
谢谢你的帮助

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

  • 在文本框1中,您有一些要替换的带有标记的字符串

  • 在文本框1中,您有令牌,并且在
    之后:
    很强,可以插入令牌位置

  • 文本框3显示结果

  • 基本上你想做字符串替换。我说得对吗

    示例代码:

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

    我觉得你的代码可以像你想的那样工作。。。除非没有匹配项,否则将输出原始字符串,而不是“nothing”。所以加上

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

    文本框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();
    

    这很令人困惑。你的问题有3个文本框,但你只举了2个例子。我建议编辑以使其更加清晰,为什么不给出一个具体的例子,说明文本框1和文本框2包含的内容,以及文本框3中具体和正确的结果应该是什么。(请编辑此信息以改进您的问题)足够公平,但仍很难理解您想要的功能。也许一些格式可以让它更清晰?您需要先将文本框的输入拆分为单独的行,然后应用您现在所做的。伙计们,这个对话太离题了,您几乎遇到了问题。唯一的问题是它应该在“:”之前扫描TB 2中的每一行并且应该检查这两个标记之间是否有任何一个等于TB1:“如果这等于,那么它应该替换,否则转到下一行如果我放多行,它什么也不给出,这是什么意思?多行是什么意思?如果我在TB3的TB1和TB2中放多行,则没有输出(replacementArray.Length==2)。。。这会阻止它工作。。。因为如果你有两行,每行有两个值。。。数组将有3个值。。。例如:“abc:456\ndef:752”将拆分为“abc”、“456\ndef”和“752”,其中\n是换行符。。。注意:这是您第一次提到多行,对吗?您首先需要对“\n”进行拆分,然后分别处理每一行。这只是一个example@Frexith我不明白你的评论。我发布的代码正在做你想做的事情,对于TextBox1中的每一行,它在TextBox2的所有行中搜索一个匹配项,当它找到时,它在TextBox3中发布替换项。我所做的是用一个假输入(tb1,tb2)和假输出(tb3)的例子。只需用文本框#替换伪造的输入和输出即可。Text@Frexith很乐意帮忙:)
    abc:bla:def
    xxx:bla2:bla3