Ich suche nach einer Möglichkeit, die letzten Zeichen aus einem String zu ziehen, unabhängig von der Größe. Nehmen wir diese Zeichenfolgen als Beispiel:
"abcd: efg: 1006746"
"bhddy: nshhf36: 1006754"
"hfquv: nd: 5894254"
Wie Sie sehen können, völlig zufällige Zeichenfolgen, aber sie haben 7 Zahlen am Ende. Wie könnte ich diese 7 Zahlen nehmen?
Bearbeiten:
Ich habe gerade festgestellt, dass String[] string = s.split(": ");
das hier großartig funktionieren würde, solange ich String [2] für die Zahlen und String [1] für irgendetwas in der Mitte nenne.
String.split()
, aber es ist erwähnenswert, dass jedes Mal, wenn Sie sie aufrufens.split(": ")
, eine neue kompiliertjava.uitl.regex.Pattern
wird. Ordnen Sie dann Ihre Zeichenfolge diesem Muster zu, und erstellen Sie eine RegexMatcher
und eineArrayList
vor derString[]
Rückgabe. Es wird relativ langsam sein und weit mehr als nötig zur Lösung dieses Problems bereitstellen. Ob dies wichtig ist, hängt von der Art Ihrer Bewerbung ab. Ich vermeidesplit()
es im Allgemeinen, es sei denn, ich brauche es wirklich. (Beachten Sie, dasssplit()
sich nicht regex verwenden , wenn Sie auf ein einzelnes Zeichen aufgeteilt.)Antworten:
Viele Dinge, die Sie tun könnten.
s.substring(s.lastIndexOf(':') + 1);
wird alles nach dem letzten Doppelpunkt bekommen.
s.substring(s.lastIndexOf(' ') + 1);
alles nach dem letzten Leerzeichen.
String numbers[] = s.split("[^0-9]+");
spaltet alle Ziffernfolgen ab; Das letzte Element des Zahlenarrays ist wahrscheinlich das, was Sie wollen.
quelle
lastIndexOf
Ansatzes ist , dass , wenn es nicht alle Leerzeichen,lastIndexOf
wird -1 zurück, so dass Sie mit dem ganzen String am Ende dann (s.substring(0)
).Wie wäre es mit:
String numbers = text.substring(text.length() - 7);
Das setzt voraus , dass es sind 7 Zeichen am Ende, natürlich. Es wird eine Ausnahme ausgelöst, wenn Sie "12345" übergeben. Sie könnten das folgendermaßen ansprechen:
String numbers = text.substring(Math.max(0, text.length() - 7));
oder
String numbers = text.length() <= 7 ? text : text.substring(text.length() - 7);
Beachten Sie, dass dies immer noch keine Überprüfung durchführt, ob die resultierende Zeichenfolge Zahlen enthält - und es wird immer noch eine Ausnahme
text
auslösen, wenn sie null ist.quelle
Diese Frage ist das beste Google-Ergebnis für "Java String Right".
Überraschenderweise hat noch niemand Apache Commons StringUtils.right () erwähnt :
String numbers = org.apache.commons.lang.StringUtils.right( text, 7 );
Dies behandelt auch den Fall, in dem
text
null ist und viele der anderen Antworten eine NullPointerException auslösen würden.quelle
n
Zeichen zu gelangen. Zum Beispiel könnten Sie tunStringUtils.right(Objects.toString(someObj), 7)
.Dieser Code funktioniert perfekt für mich:
String numbers = text.substring(Math.max(0, text.length() - 7));
quelle
Sie können dies mit diesem einzeiligen Code erreichen:
String numbers = text.substring(text.length() - 7, text.length());
Achten Sie jedoch darauf, Exception abzufangen, wenn die Länge der Eingabezeichenfolge weniger als 7 beträgt .
Sie können 7 durch eine beliebige Zahl ersetzen, z. B. N, wenn Sie die letzten 'N'-Zeichen erhalten möchten.
quelle
Ich würde entweder
String.split
oder einen regulären Ausdruck verwenden:Verwenden von String.split
String[] numberSplit = yourString.split(":") ; String numbers = numberSplit[ (numberSplit.length-1) ] ; //!! last array element
Verwenden von RegEx (erforderlich
import java.util.regex.*
)String numbers = "" ; Matcher numberMatcher = Pattern.compile("[0-9]{7}").matcher(yourString) ; if( matcher.find() ) { numbers = matcher.group(0) ; }
quelle
[0-9]{7}$
sicherstellen, dass es mit den letzten 7 Ziffern übereinstimmt .String inputstr = "abcd: efg: 1006746" int startindex = inputstr.length() - 10; String outputtendigitstr = inputstr.substring(startindex);
Stellen Sie sicher, dass die Zeichenfolgenlänge mehr als 10 beträgt.
quelle
Das sollte funktionieren
Integer i= Integer.parseInt(text.substring(text.length() - 7));
quelle
StringUtils.substringAfterLast ("abcd: efg: 1006746", ":") = "1006746";
Solange das Format der Zeichenfolge festgelegt ist, können Sie substringAfterLast verwenden .
quelle
org.apache.commons.lang3.StringUtils.substring(s, -7)
gibt dir die Antwort. Es gibt die Eingabe zurück, wenn sie kürzer als 7 ist, und null, wenn s == null ist. Es wird nie eine Ausnahme ausgelöst.
Siehe https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#substring-java.lang.String-int-int-
quelle
Beispiel: abcd: efg: 1006746 bhddy: nshhf36: 1006754 hfquv: nd: 5894254
-Schritt 1:
String firstString = "abcd: efg: 1006746";
-Schritt 2:
String lastSevenNumber = firstString.substring(firstString.lastIndexOf(':'), firstString.length()).trim();
quelle