【问题标题】:How do I return which delimiter split a certain string? (C#) [duplicate]如何返回分割某个字符串的分隔符? (C#)[重复]
【发布时间】:2021-06-15 04:19:31
【问题描述】:

我在数学运算符处拆分用户输入string,我想知道是否有某种方法可以准确记住哪个运算符充当了分隔符在代码中?

private void button1_Click(object sender, EventArgs e)
{
    string userInput = textBox1.Text;
    char[] operators = { '+', '-', '*', '/' };
    //splits the entered string into substrings after encountering operator characters
    string[] operands = userInput.Split(operators);
}

【问题讨论】:

    标签: c# .net string


    【解决方案1】:

    我建议 tokenizing 而不是 splitting(在最简单的情况下,您可以使用 Regex.Split 而不是 string.Split):

      using System.Linq;
      using System.Text.RegularExpressions;
    
      ...
    
      string userInput = textBox1.Text;
      char[] operators = { '+', '-', '*', '/' };
      
      string pattern = "(" + string.Join("|", operators
        .Select(c => Regex.Escape(c.ToString()))) + ")";
    
      string[] tokens = Regex.Split(userInput, pattern);
    

    如果textBox1.Text == "5 * 6 + 7",tokens 将是{"5 ", "*", "6", "+", "7"}。您现在要做的就是检查每个token 是操作 还是操作数。像这样的:

      // {"5", "6", "7"}
      string[] operands = tokens
        .Where(token => !operators.Any(op => op.ToString() == token))
        .Select(item => item.Trim())
        .Where(item => !string.IsNullOrEmpty(item))
        .ToArray();
    
      // {"*", "+"}
      string[] operations = tokens
        .Where(token => operators.Any(op => op.ToString() == token))
        .ToArray(); 
    

    【讨论】:

    • 感谢您使用Regex.Escape
    • 非常感谢,会试试这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 2020-04-23
    • 2020-01-26
    • 2021-09-25
    • 1970-01-01
    • 2012-05-12
    相关资源
    最近更新 更多