C# 从字符串中分离int

C# 从字符串中分离int,c#,C#,我有一个字符串,它是一个单词,然后是=,然后是一个数字 e、 g “刷新率=75” 我想在最后得到一个整数,并将其存储在一个Int中。程序使用这个值,它存储在一个ini文件中,我需要隔离这个值,因为其他一些值的计算是基于它的 如何做到这一点 先谢谢你 OOOPSSS: 对不起,伙计们,我犯了个错误 字符串的格式实际上是“RefreshRate=numHz”…即“RefreshRate=65Hz”…我确信这会起作用,但是我得到了“错误的输入格式错误,因为它也添加了Hz,这引发了异常:s类程序 c

我有一个字符串,它是一个单词,然后是=,然后是一个数字

e、 g

“刷新率=75”

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

如何做到这一点

先谢谢你

OOOPSSS:

对不起,伙计们,我犯了个错误

字符串的格式实际上是“RefreshRate=numHz”…即“RefreshRate=65Hz”…我确信这会起作用,但是我得到了“错误的输入格式错误,因为它也添加了Hz,这引发了异常:s

类程序
 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();
    }
{ 静态void Main(字符串[]参数) { int j=0; 布尔标志=假; 字符串s=“myage=400”; char[]c=s.ToCharArray(); 对于(int i=0;i'0')&(c[i]<'9')) { flag=true; } 国际单项体育联合会(旗) { c[j++]=c[i]; } } //对于(;j

我不知道是否有更好的解决方案……这个解决方案有效,

假设
yourString
包含文本
RefreshRate=75
,您可以按照这些思路做一些事情

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

一种方法是使用string.Split:

int.Parse(s.Split("=")[1])
如果您确定格式为word=value并且不是variant,那么这应该适合您

int value = int.Parse(line.Split('=').Last());
编辑:处理赫兹问题

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

    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);
    }

如果您不想处理或检查“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;
        }
    }


这将提取任何字符串中
=
后面的第一个整数。因此,如果您的输入字符串是
“Frequency2=47Hz”
,则它将返回
47
,,如果您确认word中的文本格式,则可以使用该字符串

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

这也将处理文本中出现空白的情况。

TryParsent?你在哪里看到这种方法?你是如何处理从“foo=100”中去掉“100”的?我没有看到完整的Q这一个适用于after=你有很多空格和工作人员的情况…嗨,谢谢你…我看了smt:s字符串实际上是格式的”RefreshRate=numHz“…即“RefreshRate=65Hz”…我确信这会起作用,但是我得到了“输入格式错误,因为它也添加了Hz,这引发了异常:将其替换为:`return int.Parse(splits[1]);`put this:
return int.Parse(splits[1]。替换(“Hz”,“”)
这将从末尾删除Hz。此外,您需要修复if语句。这一点非常感谢……我已经仔细查看了smt:s字符串的格式实际上是“RefreshRate=numHz”…即“RefreshRate=65Hz”…我确信这会起作用,但是我得到了“输入格式错误,因为它还添加了Hz,这是一个例外:shi mate,谢谢你,我犯了一个错误,它实际上是“RefreshRate=numHz”…即“RefreshRate=65Hz”,sry对于这个错误,你能给我进一步的建议吗?
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;
        }
    }
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);
var word="RefreshRate = 756numHZ";
         int n;
         int.TryParse(word.tolower().Replace("refreshrate","").Replace("=", "").Replace("numhz", "").Trim(), out n);