URL: https://www.overclockers.at/coding-stuff/c_int_aus_string_extrahieren_122102/page_1 - zur Vollversion wechseln!
Tja, wie mach ich das am einfachsten?
Beispiel: ich hab den String "Schüler 3A"
Ich weiß, dass genau eine einstellige Int Zahl drinnen ist, allerdings nicht deren Position innerhalb des Stringes, und auch nicht ihren Wert.
regular expressions. da ich mit c# nix am hut hab, musst dich selbst um die funktionen kümmern .
ah, daran hab ich nicht gedacht.
thx für den tip!
ok, leider hat mich der Tip nur teilweise weitergebracht, da ich nur gefunden habe, wie ich durch escape sequenzen entweder nach whitespace oder nach "word boundary" sequenzen suchen kann. word boundary beinhalten allerdings sowohl zahlen als auch buchstaben.
mir würde schon reichen, wie ich einfach die position des integer - werts im String bekomme.
Mein Gebiet ist zwar eher JAVA aber wie ich immer sag C# is eh des gleiche nur halt von M$.
In Java würd ichs so machen:
String.split(" "); Dann bekommst du ein Array mit {Schüler,3A}
und dann nimmst du mit substr(0,1) den ersten Buchstaben (in diesem Fall Zahl) vom zweiten Element;
Source:
String schStr = "Schüler 3A";
Array a = schStr.split(" ");
String number = a[1].substring(0,1);
Du musst dir jetzt nur noch die C# Funktionen dazu suchen.
thx, werds gleich ausprobieren.
Zitat von sliver33String.split(" "); Dann bekommst du ein Array mit {Schüler,3A}
Code:public bool IsNumeric(string s) { try { Int32.Parse(s); } catch { return false; } return true; }
Ich hab auch noch nie C# programmiert aber mit regulären Ausdrücken müssts so ähnlich gehen:
Code:public String GetFirstNumber(String str) { RegEx r = new RegEx("([0-9])"); Match m = r.Match(str); return m.Result("$1"); }
regex sind in c# (wie alle string-operationen) schweinelangsam.
aber solangs keine performance issues gibt: http://windows.oreilly.com/news/csharp_0101.html
@rettich: Also nix für ungut aber reguläre Ausdrücke sind - in jeder Sprache - ungefähr 100 mal schneller, als einen String in ein String-Array aufzusplitten und dann für jeden Teil mit einer Funktion, in der ein Try-Catch-Block ist (!!) die Werte zu überprüfen. Außerdem lässt sich die Funktionalität mit regulären Ausdrücken besser erweitern, wenn die Zahlen z.B. zweistellig benötigt werden.
@grassi: wieso sollt des mit regexp ned gehn
nein.. rettich hat recht!
regex sind meistens langsamer als andere lösungen.. brauchen ja auch eine finite statemachine, dafür sind regex auch erweiterbarer.
Regex haben dafür ein hohes Optimierungspotenzial, wenn man gleiche Ausdrücke oft benutzt - man kann die Statemachine ja zur Laufzeit in ausführbaren Code compilieren.
ich weiss that
ich wollte nur diesen satz
kritisieren.Zitatungefähr 100 mal schneller, als einen String in ein String-Array aufzusplitten und dann für jeden Teil mit einer Funktion, in der ein Try-Catch-Block ist (!!) die Werte zu überprüfen
zugegeben, das mit dem try-catch block ist sicher nicht die sauberste und schnellste lösung - vor allem, wenn man es für jedes element des arrays durchführt (die die schüler alle "alexander christian kraushuber-birnbauer 3A" heißen )
und die aussage mit dem "erweiterbar" stimmt auch. ideal wäre überhaupt, die parameter in einem ini-file von außen wartbar usw
leider sind die regex, wie mat schon gesagt hat, in c# (und nicht nur dort) etwas lahm. für diese, sicher nicht zeitkritische anwendung sind sie aber sicher brauchbar. deswegen oben auch mein link.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025