Estoy buscando una forma de extraer los últimos caracteres de una cadena, independientemente del tamaño. Tomemos estas cadenas como ejemplo:
"abcd: efg: 1006746"
"bhddy: nshhf36: 1006754"
"hfquv: nd: 5894254"
Como puede ver, cadenas completamente aleatorias, pero tienen 7 números al final. ¿Cómo podría tomar esos 7 números?
Editar:
Me acabo de dar cuenta de que String[] string = s.split(": ");
funcionaría muy bien aquí, siempre y cuando llame a la cadena [2] para los números y la cadena [1] para cualquier cosa en el medio.
String.split()
, pero vale la pena señalar ques.split(": ")
compilará una nuevajava.uitl.regex.Pattern
cada vez que la llame, luego hará coincidir su cadena con ese patrón, creando una expresión regularMatcher
y unaArrayList
antes de laString[]
que se devuelve. Será relativamente lento y destinará mucho más de lo necesario para resolver este problema. Si esto es importante depende de la naturaleza de su aplicación. Generalmente evito asplit()
menos que realmente lo necesite. (Tenga en cuenta quesplit()
no no utilizar expresiones regulares si se divide en un solo carácter.)Respuestas:
Muchas cosas que podrías hacer.
s.substring(s.lastIndexOf(':') + 1);
obtendrá todo después de los últimos dos puntos.
s.substring(s.lastIndexOf(' ') + 1);
todo después del último espacio.
String numbers[] = s.split("[^0-9]+");
divide todas las secuencias de dígitos; el último elemento de la matriz de números es probablemente lo que desea.
fuente
lastIndexOf
enfoque es que si no hay espacios,lastIndexOf
devolverá -1, por lo que terminará con la cadena completa (s.substring(0)
).Qué tal si:
String numbers = text.substring(text.length() - 7);
Eso supone que no son de 7 caracteres al final, por supuesto. Lanzará una excepción si lo pasa "12345". Puede abordar eso de esta manera:
String numbers = text.substring(Math.max(0, text.length() - 7));
o
String numbers = text.length() <= 7 ? text : text.substring(text.length() - 7);
Tenga en cuenta que esto todavía no está validando que la cadena resultante contenga números, y aún generará una excepción si
text
es nula.fuente
Esta pregunta es el principal resultado de Google para "Java String Right".
Sorprendentemente, nadie ha mencionado todavía Apache Commons StringUtils.right () :
String numbers = org.apache.commons.lang.StringUtils.right( text, 7 );
Esto también maneja el caso donde
text
es nulo, donde muchas de las otras respuestas arrojarían una NullPointerException.fuente
n
caracteres. Por ejemplo, podrías hacerloStringUtils.right(Objects.toString(someObj), 7)
.Este código me funciona perfectamente:
String numbers = text.substring(Math.max(0, text.length() - 7));
fuente
Puede lograrlo usando este código de una sola línea :
String numbers = text.substring(text.length() - 7, text.length());
Pero asegúrese de detectar la excepción si la longitud de la cadena de entrada es menor que 7 .
Puede reemplazar 7 con cualquier número, por ejemplo N, si desea obtener los últimos 'N' caracteres.
fuente
Que haría uso de cualquiera
String.split
o de una expresión regular:Usando String.split
String[] numberSplit = yourString.split(":") ; String numbers = numberSplit[ (numberSplit.length-1) ] ; //!! last array element
Usar RegEx (requiere
import java.util.regex.*
)String numbers = "" ; Matcher numberMatcher = Pattern.compile("[0-9]{7}").matcher(yourString) ; if( matcher.find() ) { numbers = matcher.group(0) ; }
fuente
[0-9]{7}$
asegurarse de que coincida con los últimos 7 dígitos.String inputstr = "abcd: efg: 1006746" int startindex = inputstr.length() - 10; String outputtendigitstr = inputstr.substring(startindex);
Asegúrese de verificar que la longitud de la cuerda sea superior a 10.
fuente
Esto debería funcionar
Integer i= Integer.parseInt(text.substring(text.length() - 7));
fuente
StringUtils.substringAfterLast ("abcd: efg: 1006746", ":") = "1006746";
Siempre que el formato de la cadena sea fijo, puede usar substringAfterLast .
fuente
org.apache.commons.lang3.StringUtils.substring(s, -7)
te da la respuesta. Devuelve la entrada si es más corta que 7 y nula si s == nula. Nunca lanza una excepción.
Consulte https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#substring-java.lang.String-int-int-
fuente
Por ejemplo: "abcd: efg: 1006746" "bhddy: nshhf36: 1006754" "hfquv: nd: 5894254"
-Paso 1:
String firstString = "abcd: efg: 1006746";
-Paso 2:
String lastSevenNumber = firstString.substring(firstString.lastIndexOf(':'), firstString.length()).trim();
fuente