【问题标题】:How to parse a text removing a char如何解析删除字符的文本
【发布时间】:2012-10-30 14:54:30
【问题描述】:

让我们从我有一个 txtProbe(textbox) 开始,我有 12-34-56-78-90。我想在不同的标签或文本框中解析它们......现在只在一个文本框中 - txtParse。我尝试使用该代码 - 我正在删除“-”,然后尝试显示它们但没有任何反应:

{
        char[] delemiterChars = { '-' };
        string text = txtProbe.Text;
        string[] words = text.Split(delemiterChars);
        txtParse.Text = text;
        foreach (string s in words)
        {
            txtParse.Text = s;
        }
    }

编辑: 我想在不同的标签中设置接收到的信息:
12-标签1
34-label2
56-label3
78-label4
90-label5

【问题讨论】:

  • 看起来好像什么都不应该发生;看起来文本框应该有最后一个值,因为您每次都会覆盖文本框的值。
  • 这是 web forms 还是 windows forms
  • @NikolaObritenov 总是有五个或更多标签吗?你是动态创建它们吗?没有感情,但有这么多人参与帮助你,如果你能更好地发布你的问题,你肯定会得到适当的答案。
  • 这将是多少 --**.... 我有...现在他们是 5

标签: c# winforms


【解决方案1】:

你可以使用String.Replace:

txtParse.Text = txtProbe.Text.Replace("-", " ");

【讨论】:

  • 我认为这没有抓住重点。他希望每个部分都放在不同的标签或文本框中。
  • @MarkByers 这应该很容易根据需要进行更改。
  • 是的,显然这很容易,但 OP 不知道该怎么做,而这正是他(解释不清)的问题试图提出的问题。
  • 是的,我想将所有结果设置在不同的标签中 12- labelx1 34- labelx2 56 - labelx3
  • @NikolaObritenov:令人困惑的是你写问题的方式。你需要让它更清楚。假装你在和只听懂简单句子的孩子说话,看看你能不能向他们解释你想做什么。您的 cmets 非常清晰。但是,您的问题根本不清楚。这是最重要的问题。请记住,不是每个人都会阅读所有的 cmets。你需要在问题中表达你的观点。
【解决方案2】:

以下会更“语义化”地解决问题:

var parsed = text.Replace("-", " ");

您可能过早地更改了 Page Life Cycle 中的值(在 Web 窗体的情况下),关于您在服务器控件中看不到解析值的原因。

【讨论】:

    【解决方案3】:

    对于您的具体示例,您似乎可以将'-' 替换为' '

    txtParse.Text = txtProbe.Text.Replace('-', ' ');
    

    但是为了使用空格分隔符连接一个字符串数组,你可以使用这个

    txtParse.Text = string.Join(" ", words);
    

    您的逻辑不适用于您尝试完成的任务,而仅用于学习目的,我将编写您的 sn-p 的正确版本

    string separator = string.Empty; // starts empty so doesn't apply for first element
    foreach (string s in words)
    {
        txtParse.Text += separator + s; // You need to use += operator to append content
        separator = " "; // from second element will append " "
    }
    

    编辑

    这是针对使用不同标签的情况

    Label[] labelList = new Label[] {label1, label2, label3, label4, label5};
    for (int i = 0; i < words.Length; i++)
    { 
        labelList[i].Text = words[i];
    }
    

    【讨论】:

    • 它说:索引超出了数组的范围。我输入你的代码+问题中的固定代码。
    • @NikolaObritenov:要拆分的文本是否总是 5 个元素?
    • 它将大部分拆分为 5(现在我尝试使用 5 个元素)
    • @Nikola Obreteno:你能调试一下并告诉我这段代码在哪个元素上失败了吗?
    • 元素:labelList[i].Text = words[i];类型:索引超出了数组的范围。
    【解决方案4】:

    您可以根据需要使用String.Join 加入字符串集合。在你的情况下:

    txtParse.Text = String.Join(" ", words);
    

    【讨论】:

      【解决方案5】:

      您可以直接在 .split('-') 中使用分隔符来返回表示您想要的数据的字符串数组。

      【讨论】:

        【解决方案6】:

        您的问题是您一直将s 分配给Text 属性。最终结果将是数组中的最后一个 s

        您可以改用TextBox.AppendText()

            char[] delemiterChars = { '-' };
            string text = txtProbe.Text;
            string[] words = text.Split(delemiterChars);
            txtParse.Text = text;
            foreach (string s in words)
            {
                txtParse.AppendText(s + " ");
            }
        

        【讨论】:

        • 这行得通,而不是我想现在将它们设置在标签中...当我编辑我的问题时:|
        • @NikolaObritenov 您可以将您的Label 控件添加到一个数组并执行for 循环来设置每个数组的Text 属性。但是,这确实是与您最初提出的问题不同的问题。您可以考虑发布一个新问题来解决这个问题。
        • 所以我需要添加一个新问题......罗杰。谢谢大家
        【解决方案7】:

        你可以输入txtParse.Text = txtProbe.Text.Replace('-', " ");

        或者通过修改你的代码:

        char[] delemiterChars = { '-' };
        string text = txtProbe.Text;
        string[] words = text.Split(delemiterChars,StringSplitOptions.RemoveEmptyEntries);
        foreach (string s in words)
        {
                txtParse.Text += " " + s;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-09
          • 1970-01-01
          • 2016-02-21
          • 1970-01-01
          • 2020-11-13
          • 2012-12-16
          相关资源
          最近更新 更多