C贸mo dividir una cadena en Java

    Introducci贸n

    A menudo, nos enfrentamos a una situaci贸n en la que necesitamos dividir una cadena en alg煤n car谩cter o subcadena espec铆fico, para obtener informaci贸n 煤til de ella.

    Por ejemplo, es posible que deseemos dividir un n煤mero de tel茅fono en el c贸digo de pa铆s o los datos importados de un archivo CSV.

    En este art铆culo, cubriremos c贸mo dividir una cadena en Java.

    El m茅todo split () (sin l铆mite)

    Este m茅todo toma uno String par谩metro, en formato de expresi贸n regular (regex). Este m茅todo divide la cadena alrededor de las coincidencias de la expresi贸n regular dada.

    La sintaxis de este m茅todo es:

    String[] split(String regex, int limit)
    

    Donde el regex El par谩metro representa el delimitador, es decir, en base a lo que dividiremos nuestra cadena. Tenga en cuenta que este par谩metro no tiene por qu茅 ser nada complicado, Java simplemente brinda la opci贸n de usar expresiones regulares.

    Por ejemplo, veamos c贸mo podemos dividir esta Cadena en dos nombres separados:

    String myString = "Jane-Doe";
    String[] splitString = myString.split("-");
    

    Simplemente podemos usar un car谩cter / subcadena en lugar de una expresi贸n regular real. Por supuesto, hay ciertos caracteres especiales en regex que debemos tener en cuenta y escapar de ellos en caso de que queramos su valor literal.

    Una vez que se divide la cadena, el resultado se devuelve como una matriz de cadenas. Las cadenas de la matriz devuelta aparecen en el mismo orden que en la cadena original.

    Los resultados se empaquetan en la matriz de cadenas. Para recuperar los nombres separados, podemos acceder a cada elemento:

    System.out.println(splitString[0]);
    System.out.println(splitString[1]);
    

    Esto resulta en:

    Jane
    Doe
    

    Tenga en cuenta que este m茅todo dividir谩 la cadena en todas las apariciones del delimitador. Por ejemplo, podemos tener una entrada con formato CSV:

    String myString = "Jane,21,Employed,Software Engineer";
    String[] splitString = myString.split(",");
    
    for (String s : splitString) {
        System.out.println(s);
    }
    

    Esto resulta en:

    Jane
    21
    Employed
    Software Engineer
    

    M茅todo Java split () (con l铆mite)

    Aqu铆, el m茅todo toma dos par谩metros, uno de los cuales es el discutido anteriormente. regex, y el otro es un valor entero, que denota el limit. los limit El par谩metro se usa para decidir cu谩ntas veces queremos dividir la cadena.

    los limit El par谩metro puede tomar una de tres formas, es decir, puede ser mayor, menor o mayor que cero. Echemos un vistazo a lo que representa cada una de estas situaciones:

    • Un positivo limit – Los String se dividir谩 hasta un m谩ximo de limit - 1 veces. M谩s all谩 de esto, el resto de la cadena se devolver谩 como el 煤ltimo elemento de la matriz, tal como est谩, sin dividirse. La longitud de la matriz devuelta siempre ser谩 menor o igual que limit.
    • Un negativo limit – Los String se divide en el delimitador tantas veces como sea posible, ignorando el valor negativo particular establecido. Las subcadenas de la matriz incluyen los espacios finales de la cadena original, si los hay.
    • Cuando el limit se establece en 0 – Los String se divide de nuevo tantas veces como sea posible, y no hay l铆mite en la longitud de la matriz resultante. Funciona igual que llamar al split() m茅todo, con regex como 煤nico argumento, como se vio anteriormente. En este caso, no se devuelven los espacios finales.

    Valor l铆mite positivo

    Echemos un vistazo a algunos ejemplos de uso de diferentes l铆mites. En primer lugar, un positivo limit valor:

    String myString = "there,,are,more,than,three,commas,,,";
    String [] splitStrings = myString.split(",", 4);
    
    for(String string : splitStrings){
        System.out.println(String.format(" " %s "", string));
    }
    

    Con un l铆mite de 4, el String se dividir谩 como m谩ximo en treslimit - 1) veces. Lo que nos da una matriz con cuatro elementos (0..3), siendo el 煤ltimo elemento todo despu茅s de la tercera divisi贸n:

    "there"
    ""
    "are"
    "more,than,three,commas,,,"
    

    Si usamos un negativo limit en esta misma cadena:

    String myString = "there,,are,more,than,three,commas,,,";
    String [] splitStrings = myString.split(",", -1);
    
    for(String string : splitStrings){
        System.out.println(String.format(" " %s "", string));
    }
    

    los String se dividir谩 tantas veces como sea posible, y las cadenas vac铆as finales se agregar谩n a la matriz:

    "there"
    ""
    "are"
    "more"
    "than"
    "three"
    "commas"
    ""
    ""
    ""
    

    El valor negativo real que usamos no se tiene en cuenta, obtendr铆amos el mismo resultado si us谩ramos -150.

    Si configuramos el limit a 0, la Cadena se dividir铆a nuevamente tantas veces como sea posible, pero la matriz resultante no contendr铆a los espacios vac铆os finales:

    String myString = "there,,are,more,than,three,commas,,,";
    
    // Equivalent to calling the split() method with only the regex parameter
    String [] splitStrings = myString.split(",", 0);
    
    for(String string : splitStrings){
        System.out.println(String.format(" " %s "", string));
    }
    

    Esto nos dar铆a:

    "there"
    ""
    "are"
    "more"
    "than"
    "three"
    "commas"
    

    Nota sobre caracteres especiales

    Como mencionamos anteriormente, el regex par谩metro pasado como delimitador en el split() El m茅todo es una expresi贸n regular. Tenemos que asegurarnos de escapar de los caracteres especiales si queremos usar su valor literal como delimitador. Por ejemplo, el * car谩cter significa “una o m谩s instancias de los siguientes caracteres”.

    Hay 12 de estos caracteres en expresiones regulares. Estos son: , ^, $, ., |, ?, *, +, (, ), [, {. You can see their meaning in regex here.

    If we want to split a String at one of these characters, special care has to be taken to escape these characters in the method parameters. One way we can use this is to use a backslash . For example:

    string.split("\|");
    

    Splits the string variable at the | character. We use two backlashes here since we need to first escape the Java-meaning of the backlash, so the backslash can be applied to the | character.

    Instead of this, we can use a regex character set This refers to putting the special characters to be escaped inside square brackets. This way, the special characters are treated as normal characters. For example, we could use a | as a delimiter by saying:

    string.split("[|]");
    

    Otra forma de escapar de los caracteres especiales es usar Pattern.quote():

    string.split(Pattern.quote("|"));
    

    Conclusi贸n

    los split() m茅todo de Java String class es una herramienta muy 煤til y de uso frecuente. La mayor铆a de los datos, especialmente los obtenidos a partir de la lectura de archivos, requerir铆an cierto procesamiento previo, como dividir la cadena, para obtener informaci贸n significativa de ella.

    En este art铆culo, hemos repasado c贸mo dividir cadenas en Java.

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *