Estoy preparandome para la certificación de Oracle y tuve que lidiar con la siguiente situación:
¿Cómo tomar una parte de una String
? Vamos a comprobar la clase Libro
:
public class Libro {
private final String nombre;
private final String autor;
private final String descripcion;
public Libro(String nombre, String autor, String descripcion) {
this.nombre= nombre;
this.autor = autor;
this.descripcion = descripcion;
}
public String getnombre() { return nombre; }
public String getAutor() { return autor; }
public String getdescripcion() { return descripcion; }
}
Añadiendo un nuevo libro:
String nombre = "Java EE";
String autor = "Alberto Souza";
String descripcion = "La especificación Java EE y sus respectivas " + "implementaciones han evolucionado con el tiempo. " + "La configuración y el uso de las especificaciones " + "son mucho más fáciles. Lo que todavía no es " + "tan fácil de ver es cómo podemos ponerlas " + "a trabajar juntas. ¿Cuáles debo usar " + "en mi próximo proyecto? ¿Qué puedo hacer realmente " + "con cada una de ellas? ¿Cómo hacer que una " + "hable con la otra?";Libro libro = new Libro(nombre, autor, descripcion);
¿Y esa descripción súper grande? Vamos a imprimir el libro y ver qué pasa:
nombre: Java EE autor: Alberto Souza descripción: La especificación Java EE y sus respectivas han evolucionado con el tiempo. La configuración y el uso de las especificaciones son mucho más fáciles. Lo que todavía no es tan fácil de ver es cómo podemos ponerlas a trabajar juntas. ¿Cuáles debo usar en mi próximo proyecto? ¿Qué puedo hacer realmente con cada una de ellas? ¿Cómo hacer que una hable con la otra?
¡Si solo un libro ya está ocupando todo ese espacio imagina una lista con varios! No va a ser nada bueno... ¿Qué tal, en el momento de la impresión, tomar solo los primeros 30 caracteres? Es posible hacer esto utilizando el método substring()
de la clase String
. Así que vamos a sobrescribir el método toString()
de la clase Libro:
@Overridepublic
String toString() {
if (descripcion.length() > 30) {
return "nombre : " + nombre + "\\nautor: " + autor + "\\ndescripcion: " + descripcion.substring(0, 30) + "..."; }
return "nombre : " + nombre + "\\nautor: " + autor + "\\ndescripcion: " + descripcion; }`
Imprimiendo nuevamente el libro:
nombre : Java EE autor: Alberto Souza descripcion: La especificación Java EE y su...
¡Muy bueno! ¿Pero qué significan los parámetros 0 y 30? El método substring()
tiene la siguiente firma: substring(int beginIndex, int endIndex)
. El índice inicial empieza en 0, así que puse el 0 como primer parámetro, pero ¿y el segundo parámetro? ¿Vas a la casa 30? Veamos:
¡Cómo podemos ver el índice final no es incluido! Ese es uno de los cuidados que necesitamos tener... Además del índice inicial y final, el método substring()
también recibe solo el índice inicial:
return "nombre : " + nombre + "\\nautor: " + autor + "\\ndescripcion: " + descripcion.substring(30);
Imprimiendo nuevamente el libro:
nombre : Java EE autor: Alberto Souza
descripcion: respectivas han evolucionado con el tiempo. La configuración y el uso de las especificaciones son mucho más fáciles. Lo que todavía no es tan fácil de ver es cómo podemos ponerlas a trabajar juntas. ¿Cuáles debo usar en mi próximo proyecto? ¿Qué puedo hacer realmente con cada una de ellas? ¿Cómo hacer que una hable con la otra? ...
Pero, ¿qué ha pasado? Como pueden ver, falta una parte de la descripción, es decir, cuando utilizamos el substring()
con un solo parámetro, informamos que queremos parte de la String
a partir del índice informado, o sea, desde el índice 30 hasta el final.
Genial, vimos que el substring()
tiene la capacidad de tomar un pedazo de la String
según el índice, pero ¿por qué debo comenzar siempre por 0? Supongamos que necesitamos hacer una paginación tomando los 30 siguientes caracteres de un texto y que ahora el índice comience por el 1 y el índice final es incluido:
String page1 = texto.substring(1, 30); ...
Al principio mejoró, pero mira la segunda página:
String page2 = texto.substring(31, 60); ...
¿Qué pasa? ¿Va a tomar 30 o 29 caracteres? Ahora vamos a verificarlo con el patrón actual:
String page1 = texto.substring(0, 30);
String page2 = texto.substring(30, 60);
Ten en cuenta que es mucho más natural entender que se devolverán los siguientes 30 caracteres en cada una de las páginas. ¡Debido a esta situación el estándar de comenzar por 0 y no incluir el último índice fue adoptado!
Alex Felipe Victor Vieira
Es instructor y desarrollador, posee experiencia en Java, Kotlin, Android. Creador de más de 40 cursos, como Kotlin, Flutter, Android, persistencia de datos, comunicación con Web API, personalización de pantallas, tests automatizados, arquitectura de Apps y Firebase. Es experto en Programación Orientada a Objetos, siempre enfocado en compartir las buenas prácticas y tendencias del mercado de desarrollo de software. Trabajó 2 años como editor de contenido en el blog de Alura y hoy en día, aún escribe artículos técnicos.
Traducido por: Adriana Oliveira
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 |
69289.36
CLP |
307472.10
COP |
65.90
USD |
264.35
PEN |
1435.53
MXN |
2978.57
UYU |
Plan Anual |
738.82
BOB |
105038.04
CLP |
466107.17
COP |
99.90
USD |
400.74
PEN |
2176.17
MXN |
4515.32
UYU |
Acceso a todos
los cursos
Estudia las 24 horas,
dónde y cuándo quieras
Nuevos cursos
cada semana