Wie identifiziere ich, ob eine Zeichenfolge eine Zahl ist?
Wenn ich diese strings:
"abc"
=false
"123"
=true
"ab2"
=false
Gibt es einen Befehl, wie IsNumeric, oder etwas anderes, können Sie feststellen, ob ein string eine gültige Zahl?
InformationsquelleAutor der Frage Gold | 2009-05-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update Als C# 7:
Den var s ersetzt werden können, die durch Ihre jeweiligen Arten!
InformationsquelleAutor der Antwort mquander
Diese gibt true zurück, wenn
input
alle zahlen. Weiß nicht, ob es besser alsTryParse
aber es funktioniert.Wenn Sie wollen einfach nur wissen, ob es eine oder mehrere zahlen gemischt mit Buchstaben, lassen Sie die
^
+
und$
.Edit:
Eigentlich denke ich, es ist besser als TryParse, weil Sie eine sehr lange Zeichenfolge potenziell überlauf TryParse.
InformationsquelleAutor der Antwort John M Gant
Ich habe diese Funktion mehrmals:
Aber Sie können auch verwenden;
Vom Benchmarking IsNumeric Optionen
alt-text http://aspalliance.com/images/articleimages/80/Figure1.gif
alt-text http://aspalliance.com/images/articleimages/80/Figure2.gif
InformationsquelleAutor der Antwort Nelson Miranda
Können Sie auch verwenden:
Zurück
true
für alle Ziffern (nichtfloat
) undfalse
wenn der input-string ist jede Art von alphanumerisch.Bitte beachten Sie:
stringTest
sollte keine leere Zeichenfolge sein, dies würde den test bestehen, der wird auch zahlen.InformationsquelleAutor der Antwort Kunal Goel
Dies ist wahrscheinlich die beste option in C#.
Wenn Sie wissen möchten, ob die Zeichenfolge enthält eine ganze Zahl (integer):
Den TryParse-Methode wird versuchen, die konvertieren den string in eine Zahl (integer) und wenn es erfolgreich wird true zurückgegeben und legen die entsprechende Anzahl in myInt. Wenn es nicht, gibt Sie false zurück.
Lösungen mit Hilfe der
int.Parse(someString)
alternative gezeigt, die in anderen Antworten funktioniert, aber es ist viel langsamer, weil das werfen von Ausnahmen ist sehr teuer.TryParse(...)
wurde Hinzugefügt, um die Sprache C# in der version 2, und bis dahin hatten Sie nicht die Wahl haben. Jetzt können Sie tun: vermeiden Sie daher dieParse()
alternative.Wenn Sie möchten, zu akzeptieren, dezimal-zahlen, die dezimal-Klasse hat auch eine
.TryParse(...)
Methode. Ersetzen Sie int und decimal in der obigen Diskussion, und die gleichen Grundsätze gelten.InformationsquelleAutor der Antwort Euro Micelli
Können Sie immer verwenden Sie die integrierte in der TryParse-Methoden für viele Datentypen, um zu sehen, wenn die Zeichenfolge in Frage übergeben werden.
Beispiel.
Ergebnis wäre dann = True
Ergebnis wäre dann = False
InformationsquelleAutor der Antwort TheTXI
In Fall, dass Sie nicht verwenden möchten, int.Parse-oder Doppelzimmer.Analysieren, können Sie Rollen Sie Ihre eigenen mit so etwas wie dies:
InformationsquelleAutor der Antwort BFree
Ich weiß, dies ist ein Alter thread, aber keine der Antworten richtig hat es für mich - entweder ineffizient oder nicht gekapselt für eine einfache Wiederverwendung. Ich wollte auch um sicherzustellen, dass es false zurück, wenn der string leer oder null. TryParse gibt in diesem Fall true (ein leerer string nicht zu einem Fehler beim Parsen als Zahl). So, hier ist mein string-extension-Methode:
Einfach zu bedienen:
Oder, wenn Sie wollen, um zu testen, andere Arten von Nummer, die Sie angeben können, 'style'.
Also, zum konvertieren einer Zahl mit einem Exponenten, den Sie verwenden könnten:
Oder zum testen einer potenziellen Hex-string, den Sie verwenden könnten:
Dem optionalen "Kultur" parameter kann verwendet werden, in viel die gleiche Weise.
Es wird begrenzt durch die nicht in der Lage zu konvertieren Zeichenfolgen, die sind zu groß, um in einem Doppelbett, aber das ist eine begrenzte Anforderung und ich denke, wenn Sie das arbeiten mit zahlen, die größer als diese, dann werden Sie wahrscheinlich benötigen zusätzliche spezialisierte Zahl-handling-Funktionen sowieso.
InformationsquelleAutor der Antwort cyberspy
Wenn Sie möchten, zu fangen, ein breiteres Spektrum von zahlen, à-la-PHP -is_numerickönnen Sie die folgenden verwenden:
Unit-Test:
Beachten Sie, dass, nur weil ein Wert numerisch ist, bedeutet nicht, es kann umgewandelt werden in einen numerischen Typ. Zum Beispiel
"999999999999999999999999999999.9999999999"
ist ein perfeclty gültigen numerischen Wert, aber es passt nicht in eine .NET numerischen Typ (nicht definiert in der standard-Bibliothek).InformationsquelleAutor der Antwort JDB
Wenn Sie möchten, um zu überprüfen, ob ein string eine Zahl (ich gehe davon aus, dass es sich um einen string, da, falls es eine Zahl, duh, Sie wissen, es ist eines).
könnten Sie auch tun:
Dieser kümmert sich dann um die üblichen Gemeinheiten:
enthält dezimal-TrennzeichenBigIntegers nicht Parsen von zahlen mit Nachkommastellen. (Also:BigInteger.Parse("3.3")
wird eine Ausnahme ausgelöst, und dieTryParse
für die gleichen false zurück)Double.TryParse
Müssen Sie fügen Sie einen Verweis auf
System.Numerics
und haben
auf der Spitze Ihrer Klasse (gut, der zweite ist ein bonus, denke ich mal 🙂using System.Numerics;
InformationsquelleAutor der Antwort Noctis
Können Sie TryParse verwenden, um zu bestimmen, wenn der string geparst werden können in eine ganze Zahl.
Den booleschen wird Ihnen sagen, ob es geklappt hat oder nicht.
InformationsquelleAutor der Antwort Craig
Ich denke, diese Antwort wird einfach sein, verloren zwischen all den anderen, aber wie auch immer, hier geht.
Landete ich auf diese Frage über Google, weil ich wollte, um zu überprüfen, ob eine
string
warnumeric
so dass ich konnte einfachdouble.Parse("123")
statt derTryParse()
Methode.Warum? Denn es ist ärgerlich zu haben, um zu erklären
out
variable und prüfen Sie das Ergebnis derTryParse()
bevor Sie nun, wenn der parse failed oder nicht. Ich will dasternary operator
um zu überprüfen, ob diestring
istnumerical
und dann nur analysieren, es in den ersten ternären Ausdruck oder einen default-Wert in der zweiten ternären Ausdruck.Wie diese:
Es ist einfach viel sauberer als:
Ich habe ein paar
extension methods
für diese Fälle:Erweiterung Methode eine
Beispiel:
Weil
IsParseableAs()
versucht analysiert die Zeichenfolge als die geeignete Art, statt nur zu überprüfen, ob die Zeichenfolge "numeric" es sollte ziemlich sicher sein. Und Sie können es sogar für nicht-numerische Typen, der eineTryParse()
Methode, wieDateTime
.Verwendet die Methode der Reflexion und Sie am Ende aufrufen der
TryParse()
- Methode zweimal, was natürlich nicht so effizient, aber nicht alles vollständig optimiert ist, manchmal ist die Bequemlichkeit einfach wichtiger.Diese Methode kann auch verwendet werden, um leicht zu analysieren, eine Liste der numerischen strings in eine Liste von
double
oder eine andere Art mit einem default-Wert, ohne alle Ausnahmen abzufangen:Erweiterung Methode zwei
Diese Erweiterung-Methode können Sie analysieren eine
string
wie jedertype
hat eineTryParse()
Methode und ermöglicht es Ihnen zudem, geben Sie einen Standardwert zurück, falls die Konvertierung fehlschlägt.Dies ist besser als mit den ternären operator mit der Erweiterung Methode von oben, wie es funktioniert nur die Konvertierung noch, immer noch verwendet reflektion, obwohl...
Beispiele:
Ausgänge:
InformationsquelleAutor der Antwort Hein Andre Grønnestad
Doppel.TryParse
InformationsquelleAutor der Antwort John Pirie
Wenn du wissen willst, ob ein string eine Zahl ist, können Sie immer versuchen analysiert:
Beachten Sie, dass
TryParse
gibt einebool
die Sie verwenden können, um zu prüfen, ob das Parsen erfolgreich war.InformationsquelleAutor der Antwort Gabriel Florit
Mit c# 7 Sie können inline die out-variable:
InformationsquelleAutor der Antwort Chad Kuehn
Hoffe, das hilft
InformationsquelleAutor der Antwort Arun
Hier ist die C# - Methode.
Int.TryParse-Methode (String, Int32)
InformationsquelleAutor der Antwort Syed Tayyab Ali
Ziehen Sie in einen Verweis auf Visual Basic in Ihrem Projekt und verwenden Ihre Informationen.IsNumeric Methode wie unten gezeigt, und in der Lage sein zu erfassen, schwebt ebenso wie die ganzen zahlen im Gegensatz zu der Antwort oben, die nur Fänge mit int-Werten.
InformationsquelleAutor der Antwort ΩmegaMan
Nur versuchen Sie diese einfachen code. es wird erlauben, integer oder decimal-Wert und verwirft, Alphabete und Symbole.
InformationsquelleAutor der Antwort anand360
InformationsquelleAutor der Antwort Vino