Gibt es ein äquivalent zu JavaScript parseInt in C#?
Ich Frage mich, ob jemand hatte zusammen etwas oder hatte etwas gesehen entspricht die JavaScript parseInt für C#.
Insbesondere bin ich auf der Suche, um einen string wie:
123abc4567890
und wieder nur die erste gültige Ganzzahl
123
Habe ich eine statische Methode, die ich verwendet habe, zurückgeben, nur die zahlen:
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;
}
Oben nehmen würde:
ParseInteger( "123abc4567890" );
und geben Sie mir wieder
1234567890
Ich bin mir nicht sicher, ob es möglich ist, mit einem regulären Ausdruck, oder ob es eine bessere Methode zu greifen, nur die erste Zahl aus der string.
Vielen Dank für alle Antworten, Sie waren alle sehr hilfreich. Ich markierte leppie ist als angenommen, denn es war zuerst durch ein bit und hat Arbeit. Ich nahm seine und lief mit einigen Modifikationen. Jon Skeet ist definitiv der kompletteste. Nochmals vielen Dank!
InformationsquelleAutor Doozer Blake | 2009-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie in der Nähe.
Werden Sie wahrscheinlich wollen einfach nur:
Ahh, du hast Recht, ein ^ an den Anfang der RE qould wohl gut genug sein 🙂 vielen Dank
leppie: ich war nicht darauf hindeutet, dass erforderlich war, so viel wie, dass Ihre Implementierung das Verhalten kann auch wünschenswert sein, und ich wollte überprüfen 🙂
Sie können nicht die Verwendung von " var " in das foreach, weil Regex.Spiele gibt ein MatchCollection-das ist eine nicht generische ICollection. Wie es passiert, ich gebloggt über das gestern: alicebobandmallory.com/articles/2009/06/09/...
InformationsquelleAutor leppie
Hier ist ein komplettes Beispiel. Es wird eine exception werfen, wenn Sie nicht geben Sie eine gültige string - Sie können dieses Verhalten ändern, indem Sie nicht ausdrücklich eine Ausnahme in
ParseInteger
, und mitint.TryParse
statt.Beachten Sie, dass es erlaubt, einem führenden Zeichen als gut, aber nicht eine führende +. (Wieder, einfach zu ändern.)
Beachten Sie auch, dass obwohl ich habe drei test-Fällen für den Erfolg von Situationen, habe ich keine test-Fällen für den Ausfall.
Schließlich, es wird nicht mit "abc123def". Wenn Sie es möchten, entfernen Sie die ^ von der regex.
Sie hätte es zum benchmark zu finden, die Leistung. Ich weiß nicht, die details, wie .NET regexes umgesetzt werden. Das ist abhängig von den Optionen, aber in diesem Fall habe ich nicht angegeben, dass es kompiliert werden soll, das würde wohl helfen, die Leistung nach dem ersten Treffer der Zusammenstellung.
als Sie schrieb eine benchmark-suite: würden Sie möglicherweise führen Sie diesen test etwas Zeit für mich?
Die benchmark-suite ist immer noch sehr viel in der Entwicklung, fürchte ich. Mit den Revisionen für C# in der Tiefe für die zweite Auflage, ich habe eigentlich gar keine Zeit für im moment. Sorry 🙁
ah ... das ist ok ... ich werde mal schauen, es auf meinem eigenen, wenn ich Zeit!
InformationsquelleAutor Jon Skeet
Eine leichte Veränderung Jon Skeet ist ausgezeichnete Lösung ist in Ordnung.
Ich würde die regex (wie erwähnt von Jon):
@"^([^\d]+)?(+|-)?\d+"
Diese ermöglicht für den Fall, dass führende Zeichen vor dem ersten vorkommen einer Ziffer
(z.B.
asb12354
->12354
) und die beiden integer mit Vorzeichen Fällen (z.B.+
oder-
)InformationsquelleAutor Mark
InformationsquelleAutor Lucero
Können Sie diese RegEx ("\\d+") zu finden, die zahlen am Anfang einer Zeichenkette.
Können Sie dann mit int.Parse() zu konvertieren, dass die Zeichenfolge in eine tatsächliche integer.
InformationsquelleAutor nikmd23
InformationsquelleAutor Siim Nelis
Sie NICHT haben, um schreiben Sie Ihre eigenen int-parse-Funktion!!!!
Ich weiß, dieser thread ist ziemlich alt. aber es gibt einige einfache Wege, dies zu tun:
Oder:
//verwenden Sie diese abhängig sind von Ihrer situation:
BEACHTEN:
Ich beantworte deine Topic-Frage "gibt es ein äquivalent zu JavaScript parseInt in C#?", nur geben Sie einige Idee, NICHT schreiben Sie Ihren code für Sie. Sie müssen zuerst eine Filterung auf 'Buchstaben', die Sie tun können, es mit regulärem Ausdruck oder eine einfache Zeichenkette.Zu ersetzen, oder bis zu Ihnen.
Ich beantworte deine Topic-Frage "gibt es ein äquivalent zu JavaScript parseInt in C#?", nur geben Sie einige Idee, NICHT schreiben Sie Ihren code für Sie. Sie müssen zuerst eine Filterung auf 'Buchstaben', die Sie tun können, es mit regulärem Ausdruck oder eine einfache Zeichenkette.Zu ersetzen, oder bis zu Ihnen.
InformationsquelleAutor Vin.X