【问题标题】:C# String/Array ReplacementC# 字符串/数组替换
【发布时间】:2019-02-26 04:16:08
【问题描述】:

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

所以我想要 3 个文本框。

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

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

文本框 3(输出):

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

如果等于它应该在 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 个文本框,但您只提供 2 个示例。我建议进行编辑以使其更清晰
  • 你为什么不给出一个具体的示例,说明文本框 1 和 2 包含的内容,以及 具体正确 b> 结果文本框 3 应该是。 (请使用此信息编辑以改进您的问题)
  • 很公平,但仍然很难理解您想要的功能。也许一些格式会更清楚?
  • 您需要先将文本框的输入拆分为单独的行,然后应用您现在正在执行的操作。
  • 伙计们,这次谈话太离题了xD

标签: c# arrays string replace


【解决方案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;

【讨论】:

  • 您几乎遇到了问题,唯一的问题是它应该扫描 TB 2 中“:”之前的每一行,并检查其中任何一个是否等于两个“:”之间的 TB1 标记,如果这等于那么它应该替换,否则转到下一行
【解决方案2】:

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

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

【讨论】:

  • 如果我放多行,它不会给出任何东西
  • 多行是什么意思?
  • 如果我在 TB1 和 TB2 中放入多行 TB3 则没有输出
  • if (replacementArray.Length == 2)... 这会阻止它工作...因为如果您有两行,每行有两个值...数组将有 3 个值.. . 例如:“abc:456\ndef:752”将拆分为“abc”和“456\ndef”和“752”,其中 \n 是换行符...注意:这是您提到的第一个多行,对吧?
  • 您首先需要对 '\n' 进行拆分,然后分别处理。
【解决方案3】:

您拥有的是文本框 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

【讨论】:

  • 这只是一个例子
  • @Frexith 我不明白你的评论。我发布的代码正在执行您想要的操作,对于 TextBox1 中的每一行,它都会在 TextBox2 的所有行中搜索匹配项,当它找到时,它会在 TextBox3 中发布替换。我所做的是用假输入(tb1,tb2)和假输出(tb3)举一个例子。只需用您的 textBox#.Text 替换假货输入和输出
  • @Frexith 很高兴为您提供帮助 :)
猜你喜欢
  • 2016-04-10
  • 2014-03-21
  • 2013-11-08
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 2013-04-01
相关资源
最近更新 更多