Quitar el ultimo token de un String

En un pequeño proyecto que tengo me surgió la necesidad de quitar el ultimo token de una frase por ejemplo: " dame el id de cindy" el resultado seria "dame el id de", también quita los espacios en blanco inicesarios.

public String quitaTokenFinal(String texto) {
        java.util.StringTokenizer tokens = new java.util.StringTokenizer(texto);
        int n = 0;
        String buff = "";
       
        while (tokens.hasMoreTokens()) {
            buff = tokens.nextToken();
        }

        n = texto.length() - buff.length();
        StringBuffer sb = new StringBuffer(texto);
        sb.delete(n, texto.length());
        texto = sb.toString();
        return texto;
    }

Segunda versión:

gracias a: ezamudio
    public String quitaTokenFinal(String texto) {
        java.util.StringTokenizer tokens = new java.util.StringTokenizer(texto);
        String buff = "";
       
        while (tokens.hasMoreTokens()) {
            buff = tokens.nextToken();
        }
        int n = texto.length() - buff.length();
        StringBuilder sb = new StringBuilder(texto);
        sb.delete(n, texto.length());
        return sb.toString();
    }

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de rodrigo salado anaya

Quitar espacios en blaco inecesarios de un String.

para quitar los espacios de mas en un String uso esto.

    public String quitaEspacios(String texto) {
        java.util.StringTokenizer tokens = new java.util.StringTokenizer(texto);
        texto = "";
        while(tokens.hasMoreTokens()){
            texto += " "+tokens.nextToken();
        }
        texto = texto.trim();
        return texto;
    }
Imagen de ezamudio

StringBuilder

En este caso te conviene usar StringBuilder en vez de StringBuffer, ya que lo usas sólo dentro del método y por lo tanto no tienes problemas de concurrencia.

Sin embargo no entendí para qué lo usas; al final no lo conviertes a String ni haces nada con ese objeto; si quitas esas dos lineas no pasa nada.

Imagen de rodrigo salado anaya

gracias.

cierto. me falto toString. y gracias por la sugerencia, deja me la investigo.

Imagen de ezamudio

Versión más eficiente

Como ejercicios son interesantes, pero no sería mucho más eficiente hacer esto?

String x = cadena.trim();
int espacio = x.lastIndexOf(' ');
if (espacio > 0) {
return x.substring(0, espacio);
} else {
return x;
}

Imagen de retlaw

ayuda

me podrias ayudar tengo que realizar un proyecto que identifique las palabras de un programa como ejemplo:
si el programa (lectura)contiene la palabra Import hay que hacer una lista que identifique la palabra import y que de su significado

Aplica el dos poruno, toma

Aplica el dos poruno, toma dos espacios y cambialospor uno!

texto = texto.replaceAll("  ", " ");