【问题标题】:C# Automation Multiline String TrimC#自动化多行字符串修剪
【发布时间】:2018-08-02 18:58:31
【问题描述】:

我想知道如何在某个字符之后修剪数组的每个字符串,例如,我有 1 个文本框,我在其中放置了一个多行字符串,例如:

HelloWorld:123

IAmABerliner:JFK

然后我想单击一个按钮,然后在第二个 TextBox 中,每行中的所有内容都应在“:”之后进行修剪

文本框 2 中的输出:

你好世界

IamABerliner

【问题讨论】:

  • 赢取表格,抱歉没有提及。
  • 我是这个论坛的新手...尽我所能:(
  • 你应该使用string.Split()并在换行符上分割,然后用它在:字符上分割每一行
  • 你能把代码发给我吗?
  • 我想这会对你有所帮助stackoverflow.com/questions/25661798/…

标签: c# string winforms edit trim


【解决方案1】:

WinForms Texboxes 有一个Lines 属性。

您可以使用 Linq 遍历这些行并在 : 上拆分,然后获取 First() 索引

someTextBox.Lines = someTextBox.Lines.Select(x => x.Split(':').First()).ToArray();

【讨论】:

  • 你不能在 foreach 方法中做 s =
  • @EuropeanRiven 正在通话中,没注意,查看更新
  • 最容易实施和理解的解决方案
【解决方案2】:

只是一种替代方法,我更喜欢其他方法,但您也可以使用正则表达式:

txtInput.Text = System.Text.RegularExpressions.Regex.Replace(txtInput.Text, "(?m):.*$", string.Empty);
  • (?m) 开启多行模式
  • : 匹配文字冒号
  • .* 匹配零个或多个 (*) 除换行符 (.) 以外的任何字符
  • 由于启用了多行模式,$ 匹配行尾(但不匹配换行符)

【讨论】:

  • 很容易成为最有效的解决方案,但如果没有过多使用或理解正则表达式,大多数人很难理解
【解决方案3】:

你可以使用这个小sn-p来获取你想要的字符串:

string trimmedInput = string.Join(
    "\n", 
    input
       .Split('\n')
       .Select(s => s.Substring(0, s.IndexOf(":"))));

它首先获取所有行的数组,然后在分号后对其进行修剪,然后将它们重新组合成一个字符串而不是行数组。

【讨论】:

    【解决方案4】:

    使用 StringBuilder 遵循简单的代码并拆分为我工作。

    StringBuilder sb = new StringBuilder();
    var st = textBox1.Text.Split('\n');
    for (int i = 0; i < st.Length; i++)
    {
       sb.AppendLine(st[i].Split(':')[0]);
    }
    textBox2.Text = sb.ToString();
    

    【讨论】:

      【解决方案5】:

      这可能不是最优雅的解决方案,但这是我想出的。

      string input = TextBox1.Text;
      string[] input_split = input.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
      string output = "";
      for(int i = 0; i < input_split.Length; i++)
      {
          string[] split_again = input_split[i].Split(':');
          output += split_again[0];
      }
      TextBox2.Text = output;
      

      我对其进行了测试,它给出了所需的输出。

      【讨论】:

      • 你只是以我给出的字符串为例。但我想从 windowsform TextBox 中获取多行字符串。
      • 是的,我以它们为例,但下面的代码适用于该格式的任何多行输入。
      • 我对其进行了编辑以使其更通用。您应该能够将其复制/粘贴到您的代码中并更改文本框名称,它会起作用。
      • lambda > linq !
      【解决方案6】:

      使用string.Split 方法,只取它的第一部分:

      string result = textBox2.Text.Split(':')[0];
      

      对于多行字符串:

      string result = string.Empty;
      
      foreach (string line in textBox2.Text.Split(Environment.NewLine.ToCharArray()))
      {
          result += line.Split(':')[0] + Environment.NewLine;
      }
      

      【讨论】:

      • 这不考虑行/换行符
      • 有效* 对不起,我很笨;D
      • 提前致谢!
      • @Mike 感谢您的反馈。欢迎你不同意。我更喜欢这种简单而不是不必要的RegexLinqfor 循环......
      • lambda 是简化的 foreach 循环,但我想对于初学者级别的答案来说还可以,我们不想这么快就混淆我们的新开发人员!
      猜你喜欢
      • 1970-01-01
      • 2012-12-21
      • 2013-10-16
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多