如何在C#中将部分字符串转换为int?

时间:2014-01-15 03:58:06

标签: c# string int

static void Main(string[] args)
{
    string foo = "jason123x40";
    char[] foo2 = foo.ToCharArray();
    string foo3 = "";

    for (int i = 0; i < foo2.Length; i++)
    {
        int num = 0;
        Int32.TryParse(foo2[i].ToString(), out num);
        if (num != 0)
        {
            foo3 += num.ToString();
        }
    }
    Console.WriteLine(foo3);
    Console.ReadLine();
}

所以我想说我有一个名为“john10smith250”的字符串。结果应为“10250”。但是我会用我的代码获得“125”。

我过滤掉0的原因是因为我不希望任何非数字字符被视为零。

有没有更好的方法将字符串的一部分转换为int?

7 个答案:

答案 0 :(得分:8)

使用LINQ:

var myString = "john10smith250";
var myNumbers = myString.Where(x => char.IsDigit(x)).ToArray();
var myNewString = new String(myNumbers);

答案 1 :(得分:4)

您有一些很好的解决方案可以改变方法并缩短您的代码。为了完整起见,以下是您使代码工作的方式。

您的代码假定如果num为零,则解析失败:

int num = 0;
Int32.TryParse(foo2[i].ToString(), out num);
if (num != 0) // This is wrong
{
    foo3 += num.ToString();
}

你需要改变这样的代码:

int num = 0;
if (Int32.TryParse(foo2[i].ToString(), out num))
{
    foo3 += num.ToString();
}

您的代码无效的原因是您忽略了TryParse的返回值。如果解析失败,则返回false;如果解析成功,则返回true,即使解析的数字为零。事实上,这就是TryParse采用out参数背后的原因(而不是直接返回值,Int32.Parse的方式。)

答案 2 :(得分:2)

您可以使用Regx

解决此问题

\d+是整数的regex

所以

string outputstring = Regex.Match(yourstring, @"\d+").Value;

会将该数字作为字符串给出。 Int32.Parse(outputstring)然后会给你这个号码。

或者你可以这样做

浏览字符串并使用Char.IsDigit

string a = "str123";
string b = string.Empty;
int val;
for (int i=0; i< a.Length; i++)
{
    if (Char.IsDigit(a[i]))
        b += a[i];
}
if (b.Length>0)
{
    val = int.Parse(b);
}

答案 3 :(得分:1)

使用:

var str= "jason123x40";
var number=  str.Where(x => char.IsDigit(x)).Select(x => x);

答案 4 :(得分:1)

非常接近你所拥有的......

int parseNumbersFromString(string data)
{
    string number = "";

    for(int i = 0; i < data.Length; ++i)
    {
        if(char.IsDigit(data[i]))
            number += data[i];
    }
    return Convert.ToInt32(number);
}

答案 5 :(得分:1)

*您可以使用索引来访问字符串中的字符
* IsDigit检查此char是否为数字,如果条件为真,则将其附加到字符串foo2

string foo = "jason0123x40";
string foo2 = "";

for (int i = 0; i < foo.Length; i++)
{
    if (char.IsDigit(foo[i]))
        foo2 += foo[i];
}
Console.WriteLine(foo2);
Console.ReadLine();

答案 6 :(得分:0)

您可以使用正则表达式,如下所示:

string foo = "jason123x40";
string foo3 = Regex.Replace(foo, @"\D", "");
相关问题