11

我想知道是否有人将某些东西放在一起或看过与 C# 的 JavaScript parseInt 等效的东西。

具体来说,我正在寻找一个像这样的字符串:

123abc4567890

并且只返回第一个有效整数

123

我有一个我用过的静态方法,它只返回数字:

public static int ParseInteger( object oItem )
    {
        string sItem = oItem.ToString();

        sItem = Regex.Replace( sItem, @"([^\d])*", "" );

        int iItem = 0;

        Int32.TryParse( sItem, out iItem );

        return iItem;
    }

以上将采取:

ParseInteger( "123abc4567890" );

把我还给我

1234567890

我不确定是否可以使用正则表达式,或者是否有更好的方法可以只从字符串中获取第一个整数。

4

7 回答 7

18

你很亲密。

你可能只想:

foreach (Match match in Regex.Matches(input, @"^\d+"))
{
  return int.Parse(match.Value);
}
于 2009-06-10T13:13:34.073 回答
9

这是一个完整的例子。如果你不给它一个有效的字符串,它会抛出一个异常——你可以通过不显式地在 , 中抛出异常来改变这种行为,而是ParseInteger使用int.TryParse

请注意,它也允许使用前导 - 符号,但不允许使用前导 +。(同样,易于更改。)

另请注意,虽然我有三个成功情况的测试用例,但我没有任何失败的测试用例。

最后,它不会匹配“abc123def”。如果需要,请从正则表达式中删除 ^。

using System;
using System.Text;
using System.Text.RegularExpressions;

class Test
{
    static void Main(string[] args)
    {
        Check("1234abc", 1234);
        Check("-12", -12);
        Check("123abc456", 123);
    }

    static void Check(string text, int expected)
    {
        int actual = ParseInteger(text);
        if (actual != expected)
        {
            Console.WriteLine("Expected {0}; got {1}", expected, actual);
        }
    }

    private static readonly Regex LeadingInteger = new Regex(@"^(-?\d+)");

    static int ParseInteger(string item)
    {
        Match match = LeadingInteger.Match(item);
        if (!match.Success)
        {
            throw new ArgumentException("Not an integer");
        }
        return int.Parse(match.Value);
    }
}
于 2009-06-10T13:16:49.977 回答
2

对 Jon Skeet 的出色解决方案稍作改动就可以了。

我会将正则表达式更改为(如 Jon 所述):

@"^([^\d]+)?(+|-)?\d+"

这允许在第一次出现数字之前出现前导字符的情况
(例如asb12354-> 12354)和两种有符号整数情况(例如+-

于 2009-06-10T13:24:29.930 回答
1
    public static int ParseInteger( object oItem )
    {
            int iItem = 0;
            if (oItem != null) {
                    Int32.TryParse( Regex.Match( oItem.ToString(), @"\d+" ).Value, out iItem );
            }
            return iItem;
    }
于 2009-06-10T13:20:12.047 回答
0

您可以使用此 RegEx ("\A\d+") 来查找字符串开头的数字。

然后,您可以使用 int.Parse() 将该字符串转换为实际整数。

于 2009-06-10T13:17:55.030 回答
0
int nr = Int32.Parse(yourstring);
于 2013-03-15T10:29:18.317 回答
-3

您不必编写自己的 int 解析函数!!!!

我知道这个线程很老了。但是有一些简单的方法可以做到这一点:

int.Parse(urString);
use short.Parse(urString); //if you want a short

或者://使用这些取决于您的情况:

Convert.ToInt16();
Convert.ToInt32();
Convert.ToInt64();

注意:
我正在回答您的主题问题“C# 中是否有与 JavaScript parseInt 等效的方法?”,只是给您一些想法,而不是为您编写代码。您需要首先对“字母字符”进行过滤,您可以使用正则表达式或简单的字符串进行过滤。替换,或由您决定。

于 2012-05-28T22:30:30.723 回答