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

先頭の - 記号も許可されますが、先頭の + は許可されないことに注意してください。(繰り返しますが、簡単に変更できます。)

また、成功した場合のテスト ケースは 3 つありますが、失敗した場合のテスト ケースはありません。

最後に、「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 の優れたソリューションにわずかな変更を加える予定です。

正規表現を次のように変更します(ジョンが述べたように):

@"^([^\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
int nr = Int32.Parse(yourstring);
于 2013-03-15T10:29:18.317 に答える
0

この正規表現 ("\A\d+") を使用して、文字列の先頭にある数字を見つけることができます。

次に int.Parse() を使用して、その文字列を実際の整数に変換できます。

于 2009-06-10T13:17:55.030 に答える
-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 に答える