Szukam sposobu na wyciągnięcie ostatnich znaków ze String, niezależnie od rozmiaru. Weźmy te ciągi na przykład:
"abcd: efg: 1006746"
"bhddy: nshhf36: 1006754"
"hfquv: nd: 5894254"
Jak widać, całkowicie losowe ciągi, ale mają na końcu 7 liczb. Jak mógłbym wziąć te 7 liczb?
Edytować:
Właśnie zdałem sobie sprawę, że String[] string = s.split(": ");
będzie świetnie tutaj działać, pod warunkiem, że wywołam string [2] dla liczb i string [1] dla czegokolwiek pośrodku.
String.split()
, ale warto zauważyć, żes.split(": ")
zajava.uitl.regex.Pattern
każdym razem, gdy je wywołasz, skompiluje się nowy , a następnie dopasuje twój ciąg do tego wzorca, tworząc regexMatcher
iArrayList
przedString[]
zwróceniem tego. Będzie on stosunkowo powolny i przydzieli znacznie więcej niż to konieczne, aby rozwiązać ten problem. To, czy ma to znaczenie, zależy od charakteru Twojej aplikacji. Generalnie unikam,split()
chyba że naprawdę tego potrzebuję. (Należy pamiętać, żesplit()
nie nie użyć wyrażenia regularnego, jeśli podzielić na jednym znaku.)Odpowiedzi:
Wiele rzeczy możesz zrobić.
s.substring(s.lastIndexOf(':') + 1);
otrzyma wszystko po ostatniej okrężnicy.
s.substring(s.lastIndexOf(' ') + 1);
wszystko po ostatniej spacji.
String numbers[] = s.split("[^0-9]+");
oddziela wszystkie ciągi cyfr; ostatni element tablicy liczb jest prawdopodobnie tym, czego potrzebujesz.
źródło
lastIndexOf
podejścia jest to, że jeśli nie ma żadnych spacji,lastIndexOf
zwróci -1, więc otrzymasz cały ciąg (s.substring(0)
).Co powiesz na:
String numbers = text.substring(text.length() - 7);
Zakłada to oczywiście, że na końcu jest 7 postaci. Jeśli przekażesz mu „12345”, zgłosi wyjątek. Możesz rozwiązać ten problem w ten sposób:
String numbers = text.substring(Math.max(0, text.length() - 7));
lub
String numbers = text.length() <= 7 ? text : text.substring(text.length() - 7);
Zwróć uwagę, że to nadal nie sprawdza, czy otrzymany ciąg zawiera liczby - i nadal będzie zgłaszać wyjątek, jeśli
text
ma wartość null.źródło
To pytanie jest najlepszym wynikiem Google dla „Java String Right”.
O dziwo, nikt jeszcze nie wspomniał o Apache Commons StringUtils.right () :
String numbers = org.apache.commons.lang.StringUtils.right( text, 7 );
Obsługuje to również przypadek, w którym
text
jest null, w którym wiele innych odpowiedzi zgłosiło wyjątek NullPointerException.źródło
n
znaków. Na przykład możesz to zrobićStringUtils.right(Objects.toString(someObj), 7)
.Ten kod działa dla mnie idealnie:
String numbers = text.substring(Math.max(0, text.length() - 7));
źródło
Możesz to osiągnąć za pomocą tego jednowierszowego kodu:
String numbers = text.substring(text.length() - 7, text.length());
Ale pamiętaj, aby złapać wyjątek, jeśli długość ciągu wejściowego jest mniejsza niż 7 .
Możesz zamienić 7 na dowolną liczbę, powiedz N, jeśli chcesz uzyskać ostatnie „N” znaków.
źródło
Użyłbym albo
String.split
albo wyrażenia regularnego:Korzystanie z String.split
String[] numberSplit = yourString.split(":") ; String numbers = numberSplit[ (numberSplit.length-1) ] ; //!! last array element
Korzystanie z wyrażenia regularnego (wymaga
import java.util.regex.*
)String numbers = "" ; Matcher numberMatcher = Pattern.compile("[0-9]{7}").matcher(yourString) ; if( matcher.find() ) { numbers = matcher.group(0) ; }
źródło
[0-9]{7}$
pewność, że pasuje do ostatnich 7 cyfr.String inputstr = "abcd: efg: 1006746" int startindex = inputstr.length() - 10; String outputtendigitstr = inputstr.substring(startindex);
Upewnij się, że długość sznurka jest większa niż 10.
źródło
To powinno działać
Integer i= Integer.parseInt(text.substring(text.length() - 7));
źródło
StringUtils.substringAfterLast ("abcd: efg: 1006746", ":") = "1006746";
Dopóki format ciągu jest ustalony, możesz użyć substringAfterLast .
źródło
org.apache.commons.lang3.StringUtils.substring(s, -7)
daje odpowiedź. Zwraca dane wejściowe, jeśli jest krótsze niż 7, i null, jeśli s == null. Nigdy nie rzuca wyjątku.
Zobacz https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#substring-java.lang.String-int-int-
źródło
Np .: „abcd: efg: 1006746” „bhddy: nshhf36: 1006754” „hfquv: nd: 5894254”
-Krok 1:
String firstString = "abcd: efg: 1006746";
-Krok 2:
String lastSevenNumber = firstString.substring(firstString.lastIndexOf(':'), firstString.length()).trim();
źródło