1

文字列があり、数字のみで構成されていることを確認したい。私はそれや何かを実際に解析したくない(または解析する必要はありません)。数字以外は何も含まれていないことを知りたいだけです(浮動小数点区切り記号もありません。数字だけです)。

PHPには、と呼ばれるこの優れた関数がありctype_digitます。.Net FrameworkのどこかにC#に似たものはありますか?または、正規表現などを使用する必要がありますか?

もちろん、このための正規表現の作成は非常に簡単ですが、もっと良い方法がある場合は使用しないでください:p

4

7 に答える 7

8

int.TryParseを使用できます。指定された文字列が有効な数値を表す場合はtrueを返し、そうでない場合はfalseを返します。NumerStyles.None空白スペースとプラス/マイナス記号を禁止するために使用することを忘れないでください。

更新:empiが言うように、これは非常に大きな文字列では機能しません。任意に大きな文字列がある場合は、正規表現が唯一の選択肢かもしれません。あなたは次のようなことをすることができますRegex.IsMatch(theString,"^[0-9]+$")

于 2009-11-17T12:07:45.090 に答える
5

@ bruno condeの答えは私にこれを考えさせました:D

if(subject.All(char.IsDigit))
    // Do something

今まで考えたことがなかったなんて信じられない…

于 2009-11-17T12:25:45.693 に答える
3
bool onlyDigits = "1234".All(c => char.IsDigit(c));
于 2009-11-17T12:13:40.207 に答える
1

はい、使用できます

bool Int32.TryParse(string s, out int result);

コードサンプル:

string myString = "1265";
int myInt;

if (Int32.TryParse(myString,myInt) // Returns true if mystring contains only digits
{
...
}

他のオプションは、正規表現を使用することです。

    public static bool IsDigit(string myString)
    {
        string pattern = @"^\d*$";

        if (Regex.IsMatch(myString, pattern))
            return true;
        else
            return false;
    }

要件に応じてパターンを変更できます。

于 2009-11-17T12:09:15.983 に答える
1

Methinks、あなたはあなたのために仕事をするために正規表現を使うほうがよいでしょう... "\ d +"はそれをするべきです...わかりました、あなたはそれを使いたくないと言いました...しかしそれは確実にするための絶対確実な方法です文字列には数値のみが含まれ、正規表現が渡された場合は、すぐにint.Parse(...)を使用できます。

于 2009-11-17T12:14:08.753 に答える
0

組み込みのメソッドはありません。Int32.TryParseまたはInt64.TryParseは、数値のみを含む非常に長い文字列では機能しません(整数を表すために使用される他の文字も許可される場合があります)。

于 2009-11-17T12:10:16.320 に答える
0

他の人が言っているように、あなたはこのint.TryParse方法を使うことができますが、あなたの数が本当に非常に大きくない限り、TryParseint32よりも範囲が広い他のタイプの方法を使うことができます。(もちろん、NumberStyles.None記号や句読点を避けるために、オプションを使用します)。

内訳は次のとおりです。

  1. int -2,147,483,648 .. 2,147,483,647 ..
  2. uint 0 .. 4,294,967,295
  3. long -9,223,372,036,854,775,808 .. 9,223,372,036,854,775,807 ..
  4. ulong 0 .. 18,446,744,073,709,551,615 ..
  5. float -3.402823e38 .. 3.402823e38 ..
  6. double-1.79769313486232e308 .. 1.79769313486232e308 ..
  7. decimal-79228162514264337593543950335 .. 79228162514264337593543950335 ..

最大数を解析できるのはですDouble。数値を使用する必要がある場合、ある程度の精度は失われますが、非常に長い数値を解析できます(ただし、使用する必要はないので問題はありません)。私が行った簡単なテストでは、次の文字列を正常に解析できました。

79228162514264337593543950335792281625142643375935439503357922816251426433759354395033579228162514264337593543950335792281625142643375935439503357922816251426433759354395033579228162514264337593543950335792281625142643375935439503357922816251426433759354395033579228162514264337593543950335234234234234243423

(つまり、308文字で、もう1つの数字で失敗します)

それでも、数字を使用しない場合は、やり過ぎかもしれないので、Regexを使用するか、各文字が数字であることを確認するループを使用することをお勧めします。

それから少し気が狂ったようになりたい場合は、それをいくつかの小さな文字列に分割し、タスクライブラリを使用して並行してチェックすることができます:P

(私は今少しオフトピックを知っていますが、それをしたい場合は、このC9 10minクリップをチェックしてください:parallel.forParallel For Partition RangerPartition Ranger

于 2009-11-17T16:56:45.757 に答える