从字符串中隔离int

时间:2010-09-08 14:22:04

标签: c#

我有一个字符串,然后是=,然后是一个数字。

e.g

“刷新率= 75”

我想在结尾处获取整数并将其存储在Int中。程序使用这个存储在ini文件中的值,我需要隔离这个值,因为其他一些值计算是基于它的。

如何做到这一点?

提前谢谢

Ooooopsss:

对不起,伙计们,我犯了一个大错。

该字符串实际上采用“RefreshRate = numHz”格式...即“RefreshRate = 65Hz”...我确定这会起作用,但是我得到“错误的输入格式错误,因为它也添加了Hz,并且这是抛出异常:s

10 个答案:

答案 0 :(得分:8)

It’s easy! Just use a regular expression!

var m = Regex.Match(input, @"=\s*(-?\d+)");
if (!m.Success)
    throw new InvalidOperationException(
        "The input string does not contain a number.");
return Convert.ToInt32(m.Groups[1].Value);

这将提取任何字符串中=之后的第一个整数。因此,如果您的输入字符串为"Frequency2=47Hz",则会返回47

答案 1 :(得分:6)

int i=Convert.ToInt32(st.Substring(st.IndexOf('=')+1))

答案 2 :(得分:5)

如果您确定格式为 word = value 并且不是变体,那么这应该适合您。

int value = int.Parse(line.Split('=').Last());

修改:处理伤害赫兹问题

int value = int.Parse(line.Split('=').Last().Replace("Hz", ""));

答案 3 :(得分:4)

怎么样:

    static int GetIntAfterEqual(string containsIntAfterEqual)
    {
        if(containsIntAfterEqual==null)
            throw new ArgumentNullException("containsIntAfterEqual");

        string[] splits = containsIntAfterEqual.Split('=');
        if (splits.Length == 2)
            return int.Parse(splits[1]);
        else
            throw new FormatException(containsIntAfterEqual);
    }

<强>更新 你说它可能是“entryname = 25hz”。这适用于两种情况:

    static int GetIntAfterEqual(string containsIntAfterEqual)
    {
        if(containsIntAfterEqual==null)
            throw new ArgumentNullException();

        Match match = Regex.Match(containsIntAfterEqual, @"[\d\w]+=([\d]+)\w*");
        if(match.Success)
            return int.Parse(match.Groups[1].Value);
        else
            throw new FormatException(containsIntAfterEqual);
    }

答案 4 :(得分:2)

一种方法是使用string.Split:

int.Parse(s.Split("=")[1])

答案 5 :(得分:2)

如果您在单词中确认了您的文字格式,那么您可以使用此

var word="RefreshRate = 756numHZ";
         int n;
         int.TryParse(word.tolower().Replace("refreshrate","").Replace("=", "").Replace("numhz", "").Trim(), out n);

这也将处理文本中的空格大小。

答案 6 :(得分:1)

var line = "RefreshRate=75";
int number = int.Parse(line.Split('=')[1]);

答案 7 :(得分:0)

假设yourString包含文字RefreshRate=75,您可以沿着这些方向做某事。

int.Parse(yourString.Substring(yourString.IndexOf("=")+1));

答案 8 :(得分:0)

如果您不想处理或检查“RefreshRate =”或“RefreshRate ==”或“RefreshRate = Foobar”,您可以执行以下操作

public static class IntParseExtension
    {
        public static bool TryParseInt(this string s, out int i)
        {
            i = 0;     
            bool retVal = false;
            int index;
            string sNumber;
            index = s.IndexOf("=");
            if (index > -1)
            {
                sNumber = s.Substring(index + 1);
                if (sNumber.Length > 0)
                    retVal = int.TryParse(sNumber, out i);
            }
            return retVal;
        }
    }

答案 9 :(得分:-3)

 class Program
{
    static void Main(string[] args)
    {
        int j = 0 ;
        bool flag = false;
        string s = "myage = 400";

        char[]c = s.ToCharArray();
        for (int i = 0; i <= s.Length -1; i++)
        {
            if ((c[i] > '0') && (c[i] < '9'))
            {
                flag = true;
            }
            if (flag)
            {
                c[j++] = c[i];
            }
        }
        //for (; j < s.Length - 1; j++)
        //{
            c[j] = '\0';

        s = new string(c,0,j);
        int num = int.Parse(s);
        Console.WriteLine("{0}",num);
        Console.ReadKey();
    }

我不知道是否有更好的解决方案......这个工作