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! *);
¿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!
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"
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]
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...
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
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana
Paga en moneda local en los siguientes países
Cursos de Programación, Front End, Data Science, Innovación y Gestión.
Luri es nuestra inteligencia artificial que resuelve dudas, da ejemplos prácticos y ayuda a profundizar aún más durante las clases. Puedes conversar con Luri hasta 100 mensajes por semana
Paga en moneda local en los siguientes países
Puedes realizar el pago de tus planes en moneda local en los siguientes países:
País | |||||||
---|---|---|---|---|---|---|---|
Plan Semestral |
487.37
BOB |
69018.45
CLP |
308114.50
COP |
65.90
USD |
264.97
PEN |
1441.56
MXN |
2978.57
UYU |
Plan Anual |
738.82
BOB |
104627.36
CLP |
467081.02
COP |
99.90
USD |
401.68
PEN |
2185.32
MXN |
4515.32
UYU |
Acceso a todos
los cursos
Estudia las 24 horas,
dónde y cuándo quieras
Nuevos cursos
cada semana