这有点难以解释,但我会尽力而为。
所以我想有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:
对于第一行,它工作得很好,但对于随后的那行却不是。 感谢所有帮助!
答案 0 :(得分:1)
我不确定要实现什么。我是这样理解的:
在文本框1中,您需要替换一些带有令牌的字符串。
在第一个文本框中,您具有令牌,并且在:
较强后可以插入令牌位置。
文本框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