如何返回分割某个字符串的分隔符? (C#)[重复]
Posted
技术标签:
【中文标题】如何返回分割某个字符串的分隔符? (C#)[重复]【英文标题】:How do I return which delimiter split a certain string? (C#) [duplicate] 【发布时间】: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);
【问题讨论】:
【参考方案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
非常感谢,会试试这个。以上是关于如何返回分割某个字符串的分隔符? (C#)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
无论c#中的字符是啥,如何根据每三个字符分割一个字符串[重复]