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:

    Te puede interesar:Java: encontrar elementos duplicados en una secuencia
    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:

    Te puede interesar:Java: compruebe si la cadena es un número
    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:

    Te puede interesar:Configurar el registro cerrado para proyectos Spring Boot con Github y Jenkins
    • 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.

    Te puede interesar:Java: compruebe si la cadena comienza con otra cadena

    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:

    Te puede interesar:Cómo formatear el número como cadena de moneda en Java
    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.

    Te puede interesar:Java 8 – Ejemplos de Stream.map ()

     

    Rate this post

    Etiquetas: