Bei einer gegebenen Zeichenfolge wird das erste eingebettete Vorkommen einer ganzen Zahl gefunden
Dies wurde in einem interview gefragt:
In eine beliebige Zeichenfolge, hol mir die erste vorkommen eine ganze Zahl.
Beispielsweise
Str98 dann sollte es wieder 98
Str87uyuy232 -- sollte es wieder 87
Gab ich die Antwort als Schleife über den string und vergleicht ihn mit numerischen Zeichen, wie in
if ((c >= '0') && (c <= '9'))
Dann habe ich die index von der Zahl, analysiert es und gab es. Er war irgendwie nicht überzeugt.
Kann einer Aktie die best mögliche Lösung?
Kommentar zu dem Problem
Er/Sie womöglich auf der Suche nach regex version der Antwort
Hast du nicht weiter von der ersten Ziffer, die Sie stoßen, um die letzten zusammenhängenden Ziffer?
InformationsquelleAutor der Frage gmhk | 2012-03-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt zwei Probleme mit dieser Lösung.
Betrachten Sie die test-Fälle - es sind 2 Zeichen, '8' und '7', und Sie beide bilden die ganze Zahl 87, sollten Sie zurückkehren. (Dies ist der Hauptpunkt)
Dies ist etwas kleinlich, aber den integer-Wert des Zeichens '0' ist nicht unbedingt kleiner als der Wert von '1', '2', etc. Es wohl fast immer der Fall ist, kann mir aber vorstellen, Interviewer, um zu sehen, wie diese Art von Pflege. Eine bessere Lösung wäre
if (Character.isDigit(c)) { ... }
Gibt es viele verschiedene Möglichkeiten, dies zu tun. Mein Erster Gedanke wäre:
Natürlich, wie bereits erwähnt in den Kommentaren, mit der regex-Funktionalität in Java ist wahrscheinlich der beste Weg, dies zu tun. Aber natürlich sind viele Interviewer bitten Sie Sie, Dinge zu tun, wie dies ohne Bibliotheken, etc...
InformationsquelleAutor der Antwort mfrankli
Mit einem regex, es ist ziemlich einfach:
(Dank an Eric Mariacher)
InformationsquelleAutor der Antwort cdeszaq
Mit
java.util.Scanner
:Dem Zweck, ein
Scanner
extrahieren von Token aus der Eingabe (hier:String
). Token sind Dinge, die sind durch Trennzeichen voneinander getrennt. Standardmäßig ist das Trennzeichen einScanner
ist der Leerraum, und die Token sind also Leerzeichen-getrennte Wörter.Hier, ich benutze den Begrenzer
\D+
", das bedeutet "alles, was keine Zahl ist". Die Token, die unsereScanner
können, Lesen Sie in unseren string "87" und "232". DienextInt()
Methode liest die erste.nextInt()
wirftjava.util.NoSuchElementException
wenn es keine token zu Lesen. Rufen Sie die MethodehasNextInt()
vor dem AufrufnextInt()
, um zu überprüfen, dass es etwas zu Lesen.InformationsquelleAutor der Antwort barjak
InformationsquelleAutor der Antwort Matt
Nur für den Fall, Sie wollte nicht-regex und nicht mit anderen Programmen.
hier gehen Sie
InformationsquelleAutor der Antwort Kevin
Könnten Sie gehen zu einer niedrigeren Ebene zu. Ein kurzer Blick auf ASCII-Werte zeigt, dass die alphabetischen Zeichen beginnen bei 65. Ziffern gehen von 48 - 57. Mit diesem der Fall sein, können Sie einfach 'und' n-Zeichen gegen 127 und sehen, ob dieser Wert entspricht einer Schwelle, 48 - 57.
Tun, das wäre nicht gut für die Reale Welt (unterschiedliche Zeichensätze), aber als ein Rätsel Lösung ist Spaß.
InformationsquelleAutor der Antwort jello