Ich habe eine String-Variable (im Grunde ein englischer Satz mit einer nicht angegebenen Anzahl von Zahlen) und möchte alle Zahlen in ein Array von Ganzzahlen extrahieren. Ich habe mich gefragt, ob es eine schnelle Lösung mit regulären Ausdrücken gibt.
Ich habe Seans Lösung verwendet und sie leicht geändert:
LinkedList<String> numbers = new LinkedList<String>();
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(line);
while (m.find()) {
numbers.add(m.group());
}
Antworten:
... druckt
-2
und12
.-? entspricht einem führenden negativen Vorzeichen - optional. \ d stimmt mit einer Ziffer überein, und wir müssen jedoch
\
wie\\
in einem Java-String schreiben . \ D + entspricht also einer oder mehreren Ziffern.quelle
2,000
. Für eine solche Verwendung-?\\d+,?\\d+|-?\\d+
-?\\d+(,\\d{3})*
sollte : funktionieren.Was ist mit der
replaceAll
Methode java.lang.String ?Ausgabe:
Beschreibung
[
und]
begrenzt eine Reihe von Zeichen, die einzeln abgeglichen werden sollen, dh nur einmal in beliebiger Reihenfolge^
Spezielle Kennung, die am Anfang des Satzes verwendet wird und angibt, dass alle Zeichen, die nicht im begrenzten Satz vorhanden sind, anstelle aller im Satz vorhandenen Zeichen übereinstimmen .+
Zwischen einer und einer unbegrenzten Zeit, so oft wie möglich, und nach Bedarf etwas zurückgeben-?
Eine der Figuren "-" und "?"0-9
Ein Zeichen im Bereich zwischen "0" und "9"quelle
-
sich als eine Zahl, zusammen mit Dingen wie9-
,---6
, und1-2-3
.Sie können [0-9] tatsächlich durch \ d ersetzen, dies beinhaltet jedoch das Entkommen eines doppelten Backslashs, was das Lesen erschwert.
quelle
Dies dient zum Extrahieren von Zahlen, bei denen die Dezimalstelle beibehalten wird
quelle
Die akzeptierte Antwort erkennt Ziffern, aber keine formulierten Zahlen, z. B. 2.000, noch Dezimalstellen, z. B. 4.8. Für eine solche Verwendung
-?\\d+(,\\d+)*?\\.?\\d+?
:Ausgabe:
[4.8, 2,000]
quelle
(?:\.\d+)?
.)für rationale Zahlen verwenden Sie diese:
(([0-9]+.[0-9]*)|([0-9]*.[0-9]+)|([0-9]+))
quelle
Mit Java 8 können Sie Folgendes tun:
Wenn Sie keine negativen Zahlen haben, können Sie die
replaceAll
(und!s.isEmpty()
infilter
) verwenden, da dies nur dazu dient, etwas wie richtig aufzuteilen2-34
(dies kann auch nur mit Regex in behandelt werdensplit
, ist aber ziemlich kompliziert).Arrays.stream
verwandelt unsereString[]
in eineStream<String>
.filter
entfernt die führenden und nachfolgenden leeren Zeichenfolgen sowie alle Zeichenfolgen-
, die nicht Teil einer Zahl sind.mapToInt(Integer::parseInt).toArray()
fordertparseInt
jedenString
auf, uns eine zu gebenint[]
.Alternativ verfügt Java 9 über eine Matcher.results- Methode, die Folgendes ermöglichen sollte:
So wie es aussieht, ist keines von beiden eine große Verbesserung gegenüber dem einfachen Durchlaufen der Ergebnisse mit
Pattern
/,Matcher
wie in den anderen Antworten gezeigt, aber es sollte einfacher sein, wenn Sie dies mit komplexeren Operationen verfolgen möchten, die durch die Verwendung von erheblich vereinfacht werden Streams.quelle
Extrahieren Sie damit alle reellen Zahlen.
quelle
Bruch- und Gruppierungszeichen zur Darstellung reeller Zahlen können zwischen den Sprachen unterschiedlich sein. Die gleiche reelle Zahl kann je nach Sprache sehr unterschiedlich geschrieben werden.
Die Nummer zwei Millionen auf Deutsch
2.000.000,00
und auf Englisch
2.000.000,00
Eine Methode zum vollständigen Extrahieren von reellen Zahlen aus einer bestimmten Zeichenfolge auf sprachunabhängige Weise:
quelle
Wenn Sie Zahlen ausschließen möchten, die in Wörtern enthalten sind, z. B. bar1 oder aa1bb, fügen Sie einer der auf Regex basierenden Antworten Wortgrenzen \ b hinzu. Beispielsweise:
zeigt an:
quelle
Ich würde vorschlagen, die ASCII-Werte zu überprüfen, um Zahlen aus einer Zeichenfolge zu extrahieren. Angenommen, Sie haben eine Eingabezeichenfolge als myname12345. Wenn Sie nur die Zahlen 12345 extrahieren möchten, können Sie dies tun, indem Sie zuerst die Zeichenfolge in ein Zeichenarray konvertieren und dann den folgenden Pseudocode verwenden
Sobald die Zahlen extrahiert sind, hängen Sie sie an ein Array an
Hoffe das hilft
quelle
Ich fand diesen Ausdruck am einfachsten
quelle
extrahiert nur Zahlen aus der Zeichenfolge
quelle