2010-07-14 155 views
58

Estoy buscando una forma de extraer los últimos caracteres de una cadena, independientemente de su tamaño. Vamos a tomar estas cadenas en ejemplo:Cómo obtener los últimos caracteres en una cadena en Java, independientemente del tamaño de cadena

"abcd: efg: 1006746" 
"bhddy: nshhf36: 1006754" 
"hfquv: nd: 5894254" 

Como se puede ver, completamente cadenas aleatorias, pero tienen 7 números al final. ¿Cómo podría tomar esos 7 números?

Editar:

me di cuenta de que String[] string = s.split(": "); sería un gran trabajo aquí, siempre y cuando llamo cadena [2] para el número y secuencia [1] para nada en el medio.

Respuesta

75

Un montón de cosas que podría 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 quieres.

+3

Un aspecto casual de la 'enfoque lastIndexOf' es que si hay * no * son espacios,' lastIndexOf' volverán -1, así que terminarás con la cadena completa ('s.substring (0)'). –

+0

s.substring (s.lastIndexOf (':') + 1); Me gustaría usar eso, pero ¿cómo podría obtener las letras después de los primeros dos puntos? ¿No sería en el índice de (":", 1)? – PuppyKevin

+1

@polygenelubricants: corrigió el error tipográfico en el comando dividir ... –

126

¿Qué tal:

String numbers = text.substring(text.length() - 7); 

Eso supone que no son 7 caracteres al final, por supuesto. Lanzará una excepción si la pasa "12345". Se podría tratar de que 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á haciendo ningún tipo de validación que la cadena resultante contiene los números - y seguirá siendo una excepción si text es nulo .

1

Esto debería funcionar

Integer i= Integer.parseInt(text.substring(text.length() - 7)); 
4

que haría uso de ya sea String.split o una expresión regular:


Usando String.split

String[] numberSplit = yourString.split(":") ; 
String numbers = numberSplit[ (numberSplit.length-1) ] ; //!! last array element 

Usando RegEx (requiere import java.util.regex.*)

String numbers = "" ; 
Matcher numberMatcher = Pattern.compile("[0-9]{7}").matcher(yourString) ; 
    if(matcher.find()) { 
      numbers = matcher.group(0) ; 
    } 
+2

Regex debe ser '[0-9] {7} $' para asegurarse de que coincida con los ** últimos ** 7 dígitos. – whiskeysierra

+0

@ Willi Schönborn: De acuerdo. El caso del OP sugería que los otros grupos en la cadena siempre contendrían letras. Suponía que no era necesario especificar un límite. – FK82

0

Usaría la clase StringBuffer, .reverse() la cadena, obtenga el .substring(0,7) y .reverse() el resultado de nuevo. Pero eso son 3 llamadas.

+1

Esto es una broma, ¿verdad? ;-) –

+0

Me gusta la idea de "solo leer al revés", pero terminas con 3 llamadas de función para 1 información. – sschrass

21

Este código funciona para mí perfectamente:

String numbers = text.substring(Math.max(0, text.length() - 7)); 
5

se puede lograr usando esta sola línea código:

String numbers = text.substring(text.length() - 7, text.length()); 

pero asegúrese de Excepción captura si la longitud de la cadena de entrada es menos de 7.

Puede reemplazar 7 con cualquier número, digamos N, si desea obtener los últimos 'N' caracteres.

+1

Es mejor verificar con anticipación si la longitud de entrada es 7 o más, y luego hacer la subcadena. – orique

23

Esta pregunta es el resultado principal de Google para "Java String Right".

Sorprendentemente, sin embargo, nadie ha mencionado Apache Commons StringUtils.right():

String numbers = org.apache.commons.lang.StringUtils.right(text, 7); 

Esto también maneja el caso en que text es nula, donde muchas de las otras respuestas sería lanzar una NullPointerException.

+0

Me pregunto también. De esta manera es mucho más seguro que manejar todos los problemas posibles. –

0
String inputstr = "abcd: efg: 1006746" 
int startindex = inputstr.length() - 10; 
String outputtendigitstr = inputstr.substring(startindex); 

Asegúrese de verificar longitud de la cadena es más de 10.

Cuestiones relacionadas