C#如何从字符串读取两个数字到char

时间:2018-08-21 10:35:16

标签: c#

嗨,我知道这可能有点愚蠢。但是我需要将字符串转换为数字,因此需要使用char来遍历运算符。但是,如果我尝试使用两个或多个数字,则该数字将分解为一个数字。例如。

string str="2+16-42X"

char[] ch=str.toCharArray();

输出为(忽略逗号)

2,+,1,6,-,4,2,X

我想得到2,+,16,-42,X 关于如何解决这个问题的任何建议?谢谢

4 个答案:

答案 0 :(得分:4)

您可以编写一个简单的词法分析器:

string str="2+16-42X";

StringBuilder currentNumber = new StringBuilder();
List<string> tokens = new List<string>();

foreach(char chr in str) {
    if (Char.IsDigit(chr)) {
        currentNumber.Append(chr);
    }
    else {
        if (currentNumber.Length > 0) {
            tokens.Add(currentNumber.ToString());
            currentNumber.Clear();
        }
        if (chr == '-') {
            currentNumber.Append(chr);
        }
        else {
            tokens.Add(chr.ToString());
        }
    }
}
if (currentNumber.Length > 0) {
    tokens.Add(currentNumber.ToString());
}

tokens列表包含您的数字和符号。

答案 1 :(得分:4)

这是RegEx方法

string str = "2+16-42X";
string[] result = Regex.Matches(str, "-?\\d+|[+/*X]")
                       .Cast<Match>().Select(x => x.Value).ToArray();

说明:

  • -?开头的可选-字符
  • \d+一个或多个数字
  • |
  • [+/*X]其中一个字符+/*X

https://dotnetfiddle.net/d2ZaGC

答案 2 :(得分:-2)

您可以尝试使用以下代码:

string str = "2+16-42X";

str = str.Replace("+", " +");
str = str.Replace("-", " -");
str = str.Replace("X", " X");

var numbers = str.Split(' ');

foreach (var number in numbers)
{
    Console.WriteLine(number);
}

输出:

2
+16
-42
X

答案 3 :(得分:-4)

使用RegEx:

string str="2+16-42X";

var match = Regex.Match(str, @"(\d+|\D)+");

match.Groups[1].Captures.Cast<Capture>().Select(c => c.Value).ToList();

返回:

2,+,16,-,42,X