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