Java Player - String.split() vs StringTokenizer

Buenas, hoy en la sección de "Java Player" (si somos desarrolladores java tendríamos que saber estas cosas en algún momento de nuestra carrera) vamos a ver las diferencias entre String.split() vs  StringTokenizer.




Un overview básico para entran en el tema tenemos que saber que tanto la clase  StringTokenizer  como el método split() , sirven para lo mismo, dividir una cadena en subcadenas, mas allá de su implementaciones podemos notar diferencias en su performances, haciendo a la clase  StringTokenizer  mucho mas rápida casi el 50% que el método  split(), pero a diferencia es que el StringTokenizer recibe "carácter/es" los cuales toma como delimitador de la cadena, mientras que el metodo split() puede recibir una regex (una expresión regular).

Mas allá de lo comentado arriba el StringTokenizer es codigo legacy el cual esta totalmente desaconsejado utilizar de acuerdo a Sun/Java, como bien se puede leer en el Java 6 javadoc:

"StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead."  


Traducido seria algo como esto:

"StringTokenizer es una clase heredada que se mantiene por razones de compatibilidad, aunque su uso no se recomienda en el nuevo código. Se recomienda que cualquier persona que busque esta funcionalidad utiliza el método split de String o el paquete java.util.regex su lugar."

Un ejemplo sencillo de como utilizar el Split, separando por espacios en blanco:

        String linea = "elemento1 elemento2 elemento3";

        String [] listaSeparada = linea.split("\\s+");

        for (String stringSeparado : listaSeparada) {
            System.out.println(stringSeparado);
        }




Saludos



Java Player - String.split() vs StringTokenizer Java Player - String.split() vs StringTokenizer Reviewed by El lado oscuro de java on septiembre 13, 2012 Rating: 5

1 comentario:

  1. ayuda!
    Como realizar que solo una vez me pida la cadena juntos, sea SUJETO, VERBO Y ADVERBIO, me haga las comparaciones, Ya que yo aqui lo hago por separado
    ------------------------------
    package encontrar;

    import static java.lang.System.exit;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    import javax.swing.JOptionPane;
    import jdk.nashorn.internal.ir.BreakNode;


    public class Encontrar {

    public static void main(String[] args) {
    String cadena;

    cadena = JOptionPane.showInputDialog(null, "Ingresar SUJETO");
    Pattern pat = Pattern.compile("(julia|juan)");
    Matcher mat = pat.matcher(cadena);
    if (mat.matches()) {
    System.out.println("El SUJETO ES:"+cadena);
    }else{
    System.out.println("Se esperaba SUJETO");
    exit(0);
    }

    cadena = JOptionPane.showInputDialog(null, "Ingresar VERBO");
    Pattern pat1 = Pattern.compile("(maneja|corre)");
    Matcher mat1 = pat1.matcher(cadena);
    if (mat1.matches()) {
    System.out.println("El VERBO ES:"+cadena);
    }else{
    System.out.println("Se esperaba VERBO");
    exit(0);
    }

    cadena = JOptionPane.showInputDialog(null, "Ingresar ADVERBIO");
    Pattern pat2 = Pattern.compile("(descuidadamente|frecuentemente)");
    Matcher mat2 = pat2.matcher(cadena);
    if (mat2.matches()) {
    System.out.println("El ADVERBIO ES:"+cadena);
    }else{
    System.out.println("Se esperaba ADVERBIO");
    }


    }
    }

    ResponderEliminar

Con la tecnología de Blogger.