我必须删除所有特殊字符,字母并仅保留字符串中的数字并将其存储为整数。例如" 67%!"或" $ 127a%"。我从串口获取数据,在某些情况下,在$和%之间有字母/特殊字符,或者可能是%之后的数字。目前,我有这个片段与我
string UartInput = serialcom.ReadLine();
int[] ints = UartInput.Trim(new[] { '$', '%' }).Split(' ').Select(int.Parse).ToArray();
我做了一些必要的更改,并一次传输一个值。该片段已更改为
int ints = Convert.ToInt16(serialcom.ReadLine().Trim(new[] { '$', '%' }))
不够
答案 0 :(得分:2)
这可能会为你做到这一点
.card:hover {
box-shadow: 5px 5px 20px #c4c4c4;
-webkit-transform:translate(-5px, -5px);
transform:translate(-5px, -5px);
}
另一种方式可能是
string serialcomnum = Regex.Match(serialcom,"\\d+").ToString();
int ints = Convert.ToInt32(serialcomnum);
答案 1 :(得分:1)
可能一个简单的正则表达式是最简单的解决方案,而不使用其他字符串解析方法
string input = "$67%!$127a%";
var matches = Regex.Matches(input, @"[0-9]+", RegexOptions.Compiled);
var result = matches.Cast<Match>()
.Select(x => Int32.Parse(x.Value)).ToArray();
foreach (int x in result)
Console.WriteLine(x);
这里的示例要求输入字符串中有多个数字,并返回一个整数数组。如果不是这种情况(只需要一个整数),那么可以用ToArray
替换SingleOrDefault()
并将结果赋值给整数变量。
此外,如果您的数字大于Int32.MaxValue
,则应使用Int32.Parse
更改Int64.Parse
。
答案 2 :(得分:0)
没有测试过这个,但我认为它可能有效
int result = Int32.Parse(string.Concat(yourStringVarible.ToCharArray().TakeWhile(char.IsNumber)));
编辑:
获取其他字符所包含的整数(未经过测试):
public List<int> GetInts(string text){
char[] chars = text.ToCharArray()
bool prevIsNum = false;
int startI = 0;
int lenI = 0;
List<int> ints = new List<int>();
for(i=0;i<chars.length;i++){
if(Char.IsNumber(chars[i])){
if(prevIsNum){
lenI ++;
}else{
startI = i;
lenI ++;
}
prevIsNum = true;
}else if(prevIsNum){
prevIsNum = false;
ints.add(Int32.Parse(string.Concat(chars.SubArray(startI,lenI)));
}
}
return ints;
}