«¡Ayuda, no puedo dividir una cadena!» — la historia de un problema
\n\nImagine: está escribiendo un analizador de registros en Java, procesando un archivo CSV o simplemente quiere dividir la entrada del usuario en palabras. Y entonces — alto. ¿Cómo se hace? Si alguna vez ha buscado en Google «How do I split a string in Java», sabrá que esta pregunta en Stack Overflow ha acumulado cientos de miles de visitas. No porque los programadores de Java sean perezosos, sino porque split() es algo poderoso, pero con trampas ocultas.
\n\nEn este artículo, analizaremos la división de cadenas en Java de principio a fin. Aprenderá cómo funciona el método split(), qué sorpresas traen las expresiones regulares y cómo no pisar el rastrillo que espera a cada segundo principiante. ¡Vamos allá!
El método split(): su herramienta principal
\n\nLa clase String en Java ofrece dos variantes sobrecargadas del método split():
public String[] split(String regex)\npublic String[] split(String regex, int limit)\n\nLa primera variante acepta una expresión regular y devuelve un array de cadenas. La segunda hace lo mismo, pero con un límite en la cantidad de partes. ¿Suena simple? Veamos algunos ejemplos.
\n\nEjemplo básico: división por espacio
\n\npublic class SplitExample {\n public static void main(String[] args) {\n String text = "Java divide cadenas fácilmente";\n String[] words = text.split(" ");\n \n for (String word : words) {\n System.out.println(word);\n }\n }\n}\n\nSalida:
\nJava\ndivide\ncadenas\nfácilmente\n\n¿Funciona? Funciona. Pero, ¿qué pasa si tiene varios espacios seguidos? Entonces aparecerán cadenas vacías en el array. Desagradable, ¿verdad?
\n\nDividir una cadena en Java por coma (CSV)
\n\nUna de las tareas más comunes es dividir una cadena en Java por coma. Supongamos que tiene una cadena CSV:
\n\nString csv = "manzana,pera,plátano,naranja";\nString[] fruits = csv.split(",");\n\nfor (String fruit : fruits) {\n System.out.println(fruit.trim()); // trim() elimina espacios sobrantes\n}\n\nSalida:
\nmanzana\npera\nplátano\nnaranja\n\nTenga en cuenta: agregamos trim() porque en datos reales a menudo hay espacios después de la coma. Sin esto, obtendría " manzana" con un espacio inicial — y luego se preguntaría por qué las cadenas no coinciden.
Expresiones regulares: magia y dolor
\n\nEl método split() acepta una expresión regular. Esto ofrece una gran flexibilidad, pero requiere cuidado. Veamos escenarios populares.
División por punto
\n\n¿Quiere dividir una dirección IP "192.168.1.1"? El código ingenuo str.split(".") no funcionará. ¿Por qué? Porque el punto en las expresiones regulares es un carácter especial que significa «cualquier carácter». Como resultado, obtendrá un array de cadenas vacías.
La solución correcta es escapar el punto:
\n\nString ip = "192.168.1.1";\nString[] parts = ip.split("\\\\."); // ¡Doble backslash!\n\nfor (String part : parts) {\n System.out.println(part);\n}\n// Salida: 192 168 1 1\n\nRecuerde: en Java, para escapar en expresiones regulares se usa doble backslash \\\\. Un solo \\ es un carácter de escape para la cadena, y el doble ya es para regex.
División por múltiples delimitadores
\n\n¿Qué hacer si la cadena contiene comas, puntos y comas, y espacios? Use una clase de caracteres entre corchetes:
\n\nString messy = "manzana;pera,plátano naranja";\nString[] items = messy.split("[;,\\\\s]+"); // ; o , o caracteres de espacio\n\nfor (String item : items) {\n System.out.println(item);\n}\n// Salida: manzana pera plátano naranja\n\nEl signo + significa «uno o más» — esto garantiza que una secuencia de delimitadores no cree cadenas vacías.