C#字符串/数组替换
这很难解释,但我会尽力的 所以我想要3个文本框 文本框1(输入):“X:Y:Z” 文本框2(输入):“A:B” 文本框3(输出): 现在,对于每一行,我要比较Y和A。TextBox1中的每一行如下所示: “ABC:123:DEF” 现在它应该拆分出123,并将其与A进行比较,A也是从B中拆分出来的 如果等于,则应在文本框3:X:B:Z中给出 如果不是,它不应该在文本框3中给出它 示例: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 ------
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:
对于第一行,它工作得很好,但对于下面的行则不行。
谢谢你的帮助 我不确定要实现什么目标。我是这样理解的:
之后:
很强,可以插入令牌位置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