通过选择要保留的元素将字符串转换为整数

时间:2017-02-02 09:03:55

标签: c#

我必须删除所有特殊字符,字母并仅保留字符串中的数字并将其存储为整数。例如" 67%!"或" $ 127a%"。我从串口获取数据,在某些情况下,在$和%之间有字母/特殊字符,或者可能是%之后的数字。目前,我有这个片段与我

string UartInput = serialcom.ReadLine();
int[] ints = UartInput.Trim(new[] { '$', '%' }).Split(' ').Select(int.Parse).ToArray();

我做了一些必要的更改,并一次传输一个值。该片段已更改为

int ints = Convert.ToInt16(serialcom.ReadLine().Trim(new[] { '$', '%' }))

不够

3 个答案:

答案 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;
}