Botón para abrir el Menú Botón para cerrar el Menú
Logo da empresa Alura
Iniciar Sesión Nuestros Planes
Formaciones Conoce a Luri
  • Programación _
  • Front End _
  • Data Science _
  • DevOps _
  • Innovación y Gestión _
Artículos de Tecnología > Programación

Cómo separar palabras de String en Java

Alura
Alex Felipe
Alex Felipe
16/11/2020

Compartir

Mira este artículo:
  1. Capturando una parte de la String
  2. Separando palabras con el split
  3. Precauciones al usar el split
  4. Aplicar expresión regular en el split
  5. Agregar más de una regla con pipe

Leí un archivo CSV con las informaciones nombre, correo electrónico y puntos de un alumno. Estas informaciones están contenidas en una única String:

String alumnoRecibido = "Alex; [email protected]; 15000";

Ahora necesito enviarle estas informaciones:

Alumno alumno = new Alumno();
alumno.setNombre (* ¡no puedo pasar toda la string! *);

Capturando una parte de la String

¿Y ahora? ¿Cómo puedo conseguir una parte de esta String y settar en mi alumno? Podemos usar el método substring(), de la clase String, que toma una parte usando 2 parámetros:

alumno.setNombre(alumnoRecibido.substring(0, 4));
System.out.println(alumno.getNombre());

Probando el código:

 Alex

¡Genial, funcionó!

El método substring()capturó exactamente el nombre del alumno Alex, porque el nombre Alex comienza al principio (posición 0) y termina en el 4° carácter de esta String, es decir, para capturar el correo electrónico tendré que usar el substring() de nuevo. Entonces, veamos en qué posición está el correo electrónico…

El comienzo es 6, ahora el final ... 7, 8, 9, 10, 11, 12, 15, 17, 20 ... ¡Perdí la cuenta! ¡Qué tedioso! ¿Cada vez tendré que contar con los dedos la posición del texto?

¿Y si el alumno fuera Guillermo? No terminaría en la 4ª posición ... ¡Esto definitivamente será un gran problema!

Separando palabras con el split

Además del método substring() la clase String tiene el método split()que separa el texto en partes según una regla, por ejemplo, quiero que mi texto se separe cada vez que aparezca un ";":

String[] textoSeparado = alumnoRecibido.split(";");
System.out.println(Arrays.toString(textoSeparado));

Viendo el array:

[Alex, [email protected], 15000]

¡Pudimos separar la información del alumno! Tenga en cuenta que el split() devolvió un array de String, pasa eso porque separa cada línea en Strings diferentes, por esta razón devuelve el array de String. Ahora podemos asignar cada valor a mi objeto alumno:

alumno.setNombre(textoSeparado[0]);
alumno.setEmail(textoSeparado[1]);
alumno.setPuntos(Integer.parseInt(textoSeparado[2]));
System.out.println(alumno.getNombre() + " - " + alumno.getEmail() + " - " + alumno.getPuntos());

Verificación de las informaciones del alumno:

Exception in thread "main" java.lang.NumberFormatException: For input string: " 15000"

Precauciones al usar el split

Parece que nuestra conversión a int no funcionó... Apareció la exception porque en nuestra String tenemos un espacio (backspace) entre el ";" y las informaciones, es decir, en lugar de recibir sólo el número, se recibió el espacio junto con el número, por lo que no fue posible convertir. Si imprimieramos solo el correo electrónico, también vendría con el espacio:

System.out.println(alumno.getEmail());

Imprimiendo sólo el correo electrónico:

 [email protected]

Aplicar expresión regular en el split

Necesitamos informar al split() para que elimine los espacios. El split() trabaja con expresión regular, es decir, podemos especificar las reglas usando expresión regular. En este caso usaré la expresión "\s" que significa espacio en blanco:

String[] textoSeparado = alumnoRecibido.split(";\\s");
//setters
System.out.println(alumno.getNombre() + " - " + alumno.getEmail() + " - " + alumno.getPuntos());

Ejecutando el código nuevamente:

 Alex - [email protected] - 15000

¡Funcionó! Sin embargo, hay un pequeño detalle... la expresión regular ";\s" significa que siempre será cuando tenga ";" y un espacio juntos, es decir, si la String fuera:

String alumnoRecibido = "Alex;[email protected];15000"; 
String[] textoSeparado = alumnoRecibido.split(";\\s");
System.out.println(Arrays.toString(textoSeparado));

El resultado sería:

[Alex; [email protected];15000]

Seguramente mi sistema no funcionaría...

Agregar más de una regla con pipe

Para hacer que el Split lidie con el caso de ";" o ";\s" usamos el pipe (|):

String[] textoSeparado = alumnoRecibido.split(";|;\\s");

Volviendo a probar la misma String:

[Alex, [email protected], 15000]

¡Excelente!

Ahora podemos obtener todas las informaciones del alumno que provienen de la String. Es importante verificar que se utilizaron dos "", ya que es necesario "escapar" de la barra para ser reconocida dentro de la String.

Vimos que cuando necesitamos separar texto en Java, tenemos el método split() de clase String que tiene la capacidad de separar el texto en partes según una regla específicada. En nuestro ejemplo se separó en todas las veces que aparecía ";" o cuando aparecían ";" más un espacio junto. También podría ser una "," o ":".

Lo importante es saber que el split() funciona con expresiones regulares, por lo que se aplica cualquiera de las dos.

En Alura tenemos toda una formación con varios cursos de Java, desde lo más básico con el lenguaje hasta conceptos más avanzados como clases, poliformismo y herencia. Pero no te asustes con esos términos, ellos son abordados con un proyecto práctico que junto con nuestra metodología y didáctica hacen que el contenido sea mucho más fácil de ser aprendido.

Aprovecha nuestro descuento de lanzamiento y comienza a estudiar en Alura:

Plan trimestral de USD 29,90 por USD 19,90 https://app.aluracursos.com/compra/trimestral/promo-lanzamiento

Alex Felipe
Alex Felipe

Alex é instrutor e desenvolvedor e possui experiência em Java, Kotlin, Android. Atualmente cria conteúdo no canal https://www.youtube.com/@AlexFelipeDev.

Artículo Anterior
¿Aprender dos lenguajes de programación al mismo tiempo?
Siguiente Artículo
Comprensión de listas en Python

Ver otros artículos sobre Programación

Navegación

  • Planes
  • Instructores
  • Blog
  • Política de privacidad
  • Términos de uso
  • Sobre nosotros
  • Preguntas frecuentes

¡CONTÁCTANOS!

  • ¡Quiero entrar en contacto!

Blog

  • Programación
  • Data Science
  • Front End
  • Innovación y Gestión
  • DevOps

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

NOVEDADES Y LANZAMIENTOS

Aliados

  • Programa de aceleração Scale-Up Endeavor
  • En Alura somos unas de las Scale-Ups seleccionadas por Endeavor, programa de aceleración de las empresas que más crecen en el país.
  • Growth Academy 2021 do Google For Startups
  • Fuimos unas de las 7 startups seleccionadas por Google For Startups en participar del programa Growth Academy en 2021
Alura

Powered by

Caelum

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

Cursos

Cursos de Programación
Lógica de Programación | Java
Cursos de Front End
HTML y CSS | JavaScript | React
Cursos de Data Science
Data Science | Machine Learning | Excel | Base de Datos | Data Visualization | Estadística
Cursos de DevOps
Docker | Linux
Cursos de Innovación y Gestión
Transformación Ágil | Marketing Analytics

Alura

  • Educação em Tecnologia

    • logo fiap FIAP
    • logo casa do codigo Casa do Código
    • logo pm3 PM3 - Cursos de Produto
  • Mais Alura

    • logo alura start START BY Alura
    • logo alura lingua Alura Língua
    • logo alura para empresas Alura Para Empresas
    • logo alura latam Alura LATAM
  • Comunidade

    • logo tech guide Tech Guide
    • logo 7 days of code 7 days of code
    • logo Hipsters ponto Jobs Hipsters ponto Jobs
  • Podcasts

    • logo Hipster Network Hipster Network
    • logo Hipsters ponto Tech Hipsters ponto Tech
    • logo Dev sem fronteiras Dev sem Fronteiras
    • logo Like a Boss Like a Boss
    • logo IA Sob Controle IA Sob Controle
    • logo Mesa de Produto Mesa de Produto
    • logo Decode Decode
    • logo FIAPCast FIAPCast