Schnellste Möglichkeit zu überprüfen, ob die Zeichenfolge nur Ziffern enthält
Ich kenne ein paar Möglichkeiten, wie Sie dies überprüfen können.
regex -int.parse
,tryparse
looping.
kann mir jemand sagen, was ist der Schnellste Weg, dies zu überprüfen?
müssen, ist nur ÜBERPRÜFEN keine Notwendigkeit, um tatsächlich zu analysieren.
dies ist nicht die gleiche Frage wie: Wie kann ich feststellen, ob ein string eine Zahl?
die Frage ist nicht nur, wie identifizieren.
aber über das, was der Schnellste Methode.
Kommentar zu dem Problem - Öffnen
w/o genau Messen ich würde vermuten, int.tryparse
Wahrscheinlich eine Schleife geschrieben in der Montage, liest native-Wort-große Stücke von Daten aus dem string in ein register und führt dann einen range-check auf jedes byte in das register.
einfach
return str.Alle(Char.IsDigit);
int.TryParse nicht überprüfen, ob Zeichenfolge enthält nur Ziffern! Zeichenfolgen wie " -13 " (mit minus-und Leerzeichen) erfolgreich analysiert werden.
Mögliche Duplikate von Wie kann ich feststellen, ob ein string eine Zahl ist?
InformationsquelleAutor der Frage Nahum | 2011-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wird wohl der Schnellste Weg, es zu tun.
InformationsquelleAutor der Antwort Janiels
Hier einige benchmarks basierend auf 1000000 analysiert, die von den gleichen string:
Aktualisiert
release
stats:Hier ist der code, sieht aus wie IsDigitsOnly ist schneller:
Natürlich ist es erwähnenswert, dass TryParse nicht erlaubt, führende/nachfolgende Leerzeichen sowie kulturspezifische Symbole. Es ist auch begrenzt auf die Länge der Zeichenfolge.
InformationsquelleAutor der Antwort TheCodeKing
Der char hat schon ein IsDigit(char c), die Folgendes tut:
Können Sie einfach, dies zu tun:
InformationsquelleAutor der Antwort flayn
Können Sie einfach tun dies mit Hilfe von LINQ
return str.All(char.IsDigit);
InformationsquelleAutor der Antwort Uday
Wenn Sie sind besorgt über die Leistung, weder
int.TryParse
nochRegex
- schreiben Sie Ihre eigene (einfache) Funktion (DigitsOnly
oderDigitsOnly2
unten, aber nichtDigitsOnly3
- LINQ scheint zu entstehen, eine erhebliche overhead).Beachten Sie auch, dass
int.TryParse
wird fehlschlagen, wenn der string zu lang ist "fit" inint
.Diesem einfachen benchmark...
...führt zu folgendem Ergebnis...
InformationsquelleAutor der Antwort Branko Dimitrijevic
Werden kann, etwa 20% schneller mit nur einem Vergleich pro
char
undfor
stattforeach
:Code für die Tests verwendet (immer Profil, weil die Ergebnisse davon abhängen, hardware, Versionen, etc.):
Ergebnisse auf Intel i5-3470 @ 3.2 GHz, VS 2015 .NET 4.6.1 Release-Modus und Optimierungen aktiviert:
Für jemand versucht, verwenden Sie die kürzere Methoden, beachten Sie, dass
.All
Ergebnisse intrue
für leere Saiten und Ausnahme fürnull
stringschar.IsDigit
gilt für alle Unicode-Zeichen in der Nd-Kategorieint.TryParse
ermöglicht auch weiß spase und Zeichen ZeichenInformationsquelleAutor der Antwort Slai
Ich wie Linq zu machen, und die Ausfahrt auf die erste Diskrepanz, die Sie tun können diese
InformationsquelleAutor der Antwort Alobidat
Sollte dies funktionieren:
int.Parse
oderint.TryParse
funktioniert nicht immer, da der string enthält möglicherweise mehr stellen, die ein int aufnehmen kann.Wenn Sie beabsichtigen, führen Sie diese überprüfung mehr als einmal ist es nützlich, um ein regex kompiliert - es braucht mehr Zeit, der ersten Zeit, ist aber viel schneller nach.
InformationsquelleAutor der Antwort Petar Ivanov
Wahrscheinlich der Schnellste Weg ist:
Hinweis: wird es wieder Wahr im Falle Ihrer Zeichenfolge leer ist, was nicht korrekt ist (wenn Sie nicht in Anbetracht leerer als gültige Zahl/Ziffer )
InformationsquelleAutor der Antwort Atulya
Können Sie dies tun, in einer Linie LINQ-Anweisung. OK, ich begreife, das ist nicht unbedingt der Schnellste, also nicht technisch beantworten Sie die Frage, aber es ist wahrscheinlich das einfachste zu schreiben:
InformationsquelleAutor der Antwort Stephen Holt
Können Sie versuchen, mit Regulären Ausdrücken durch die Prüfung der Eingabe-string, der nur zahlen (0-9) mit der
.IsMatch(string input, string pattern)
Methode in C#.Hinsichtlich
InformationsquelleAutor der Antwort Jason Cidras
dies funktioniert perfekt, es gibt viele andere Möglichkeiten aber diese funktionieren würde
InformationsquelleAutor der Antwort Hossein ElDelbani
Sehr Clevere und einfache Weise zu erkennen, Ihr string ist enthält nur Ziffern oder nicht, ist auf diese Weise:
InformationsquelleAutor der Antwort Avtandil Kavrelishvili
Versuchen, diesen code:
InformationsquelleAutor der Antwort H. Borsipour
InformationsquelleAutor der Antwort ReR
Was
char.IsDigit(myChar)
?InformationsquelleAutor der Antwort Mirko