嗨,我知道这可能有点愚蠢。但是我需要将字符串转换为数字,因此需要使用char来遍历运算符。但是,如果我尝试使用两个或多个数字,则该数字将分解为一个数字。例如。
string str="2+16-42X"
char[] ch=str.toCharArray();
输出为(忽略逗号)
2,+,1,6,-,4,2,X
我想得到2,+,16,-42,X
关于如何解决这个问题的任何建议?谢谢
答案 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
答案 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