繁体   English   中英

从字符串 c# 中解析多个值

[英]Parse multiple values from string c#

假设我已经写了“5 和 6”或“5+6”。 如何在 c# 中将 5 和 6 分配给两个不同的变量?

PS如果在字符串中找到某些字符,我也想做某些工作。 假设我已经写了 5+5。 这段代码会这样做吗?

 if(string.Contains("+"))
 {
     sum=x+y;
 }
string input="5+5";

var numbers = Regex.Matches(input, @"\d+")
                   .Cast<Match>()
                   .Select(m => m.Value)
                   .ToList();

就个人而言,我会投票反对做一些拆分和正则表达式的事情。

相反,我会(过去也这样做过)使用许多表达式评估库之一,例如Code Project 上的这个库(以及CodePlex 上更新版本)。

使用上面的解析器/工具,您可以执行以下操作:

在此处输入图片说明

一个简单的表达式评估可能如下所示:

Expression e = new Expression("5 + 6");
Debug.Assert(11 == e.Evaluate());

对我来说,这比我自己进行解析(包括正则表达式等)更能防错。

您应该为字符串使用另一个名称而不是string

var numbers = yourString.Split("+");
var sum = Convert.ToInt32(numbers[0]) + Convert.ToInt32(numbers[1]);

注意:这是一个没有任何错误检查或错误处理的实现......

您可以使用String.Split方法,例如;

string s = "5 and 6";
string[] a = s.Split(new string[] { "and", "+" }, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine(a[0].Trim());
Console.WriteLine(a[1].Trim());

这是一个DEMO

如果要将字符串中的数字分配给变量,则必须解析字符串并进行转换。

简单示例,如果您的文本只有一个数字

string text = "500";
int num = int.Parse(text);

现在,如果你想解析更复杂的东西,你可以使用 split() 和/或 regex 来获取它们之间的所有数字和运算符。 比您只是迭代数组并将数字分配给变量。

string text = "500+400";
if (text.Contains("+"))
{
 String[] data = text.Split("+");
 int a = int.Parse(data[0]);
 int b = int.Parse(data[1]);
 int res = a + b;
}

基本上,如果您只有 2 个数字和它们之间的操作符,那就可以了。 如果你想制作“计算器”,你需要更多的东西,比如二叉树或堆栈。

使用 String.Split 方法。 它将您的字符串从给定的字符中拆分出来,并返回一个字符串数组,该数组包含根据要中断的字符(在本例中为“+”)分解为多个部分的值。

        int x = 0;
        int y = 0;
        int z = 0;

        string value = "5+6";
        if (value.Contains("+"))
        {
            string[] returnedArray = value.Split('+');
            x = Convert.ToInt32(returnedArray[0]);
            y = Convert.ToInt32(returnedArray[1]);
            z = x + y;
        }

像这样的事情可能会有所帮助

string strMy = "5&6";
char[] arr = strMy.ToCharArray();
List<int> list = new List<int>();
foreach (char item in arr)
{
  int value;
  if (int.TryParse(item.ToString(), out value))
  {
    list.Add(item);
  }
}

列表将包含所有整数值

使用正则表达式获取这些值,然后打开操作数进行计算

        string str = "51 + 6";
        str = str.Replace(" ", "");
        Regex regex = new Regex(@"(?<rightHand>\d+)(?<operand>\+|and)(?<leftHand>\d+)");

        var match = regex.Match(str);
        int rightHand = int.Parse(match.Groups["rightHand"].Value);
        int leftHand = int.Parse(match.Groups["leftHand"].Value);
        string op = match.Groups["operand"].Value;

        switch (op)
        {
            case "+":
            .
            .

            .


        }

拆分函数可能使用起来很舒服,但空间效率低下,因为它需要字符串数组
也许 Trim()、IndexOf()、Substring() 可以代替 Split() 函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM