2011-01-12 126 views
37

¿Cuál es la forma más sencilla de obtener la última palabra de una cadena en Java? Puede suponer que no hay signos de puntuación (solo caracteres alfabéticos y espacios en blanco).Java: forma más sencilla de obtener la última palabra en una cadena

+0

relacionada: http://stackoverflow.com/questions/1181969/java-get-last-element-after-split – GreenMatt

+3

título dice "más rápido", preguntas pide "más simple". Por favor aclara – z5h

+1

Lo más rápido y simple para codificar y leer. El tiempo de ejecución es irrelevante. Por otro lado, tener una redacción diferente es mejor para fines de búsqueda, aunque la discrepancia no fue intencional. – Muhd

Respuesta

126
String test = "This is a sentence"; 
String lastWord = test.substring(test.lastIndexOf(" ")+1); 
+7

Necesita un +1 allí y falla en una sola palabra. – marcog

+0

Una línea es buena ya que la usaré en el código de plantilla de Velocity. Podría combinarse con una expresión regular para dar cuenta de otros personajes como la solución de JST. – Muhd

+2

En realidad, esto es mejor, ya representa una sola palabra: Cadena lastWord = test.substring (test.lastIndexOf ("") +1); – Muhd

17
String testString = "This is a sentence"; 
String[] parts = testString.split(" "); 
String lastWord = parts[parts.length - 1]; 
System.out.println(lastWord); // "sentence" 
+0

Esta es la solución que probablemente habría ideado por mi cuenta, no está mal, pero un one-liner sería mejor. – Muhd

+0

Cuando dices "más rápido", ¿te refieres al código más corto o más rápido de ejecutar? Esto podría convertirse en un trazador de líneas, pero no se ejecutaría más rápido y sería mucho más difícil de leer. –

+1

No dije "más rápido", dije "más simple", con lo cual quise decir una combinación de brevedad y facilidad de comprensión. – Muhd

10

Si otros espacios en blanco son posibles, entonces te gustaría:

testString.split("\\s+"); 
4

Usted puede hacer eso con StringUtils (de Apache Commons Lang). Evita la magia de índice, por lo que es más fácil de entender. Desafortunadamente substringAfterLast devuelve cadena vacía cuando no hay separador en la cadena de entrada, por lo que necesitamos la instrucción if para ese caso.

public static String getLastWord(String input) { 
    String wordSeparator = " "; 
    boolean inputIsOnlyOneWord = !StringUtils.contains(input, wordSeparator); 
    if (inputIsOnlyOneWord) { 
     return input; 
    } 
    return StringUtils.substringAfterLast(input, wordSeparator); 
} 
8

Aquí es una manera de hacerlo utilizando String 's incorporado en las capacidades de expresiones regulares:

String lastWord = sentence.replaceAll("^.*?(\\w+)\\W*$", "$1"); 

La idea es hacer coincidir toda la cadena de ^ a $, la captura de la última secuencia de \w+ en un grupo de captura 1, y reemplace la oración completa con $1.

Demo.

Cuestiones relacionadas