String y Scanner en Java
En Java veremos que es muy habitual trabajar con texto, por lo que en esta guía cubriremos los métodos más útiles de la clase String y el uso de Scanner.
1. Scanner – Leer entrada del usuario
La clase Scanner permite capturar datos ingresados por consola.
Es decir, muchas veces, al crear una variable, no le daremos nosotros como programadores un valor.
String nombre = "Maria";
Sino que le preguntaremos "al usuario" que introduzca su nombre, de manera que no introducimos ningún valor desde código, sino desde la consola.
Para ello utilizaremos Scanner. La estructura base es:
// 1. Importar Scanner (siempre igual)
import java.util.Scanner;
public class EjemploScanner {
public static void main(String[] args) {
// 2. Crear Scanner (siempre iguak)
Scanner sc = new Scanner(System.in);
// 3. Mostrar con un sysout el mensaje de "la pregunta al usuario"
System.out.print("Ingresa tu nombre: ");
// 4. Guardar el valor introducido por el usuario en una variable
String nombre = sc.nextLine();
// Podemos utilizar el Scanner tantas veces como queramos
System.out.print("Ingresa tu edad: ");
int edad = sc.nextInt(); // nextInt() lee un entero
System.out.print("Ingresa tu altura (en metros): ");
double altura = sc.nextDouble(); // nextDouble() lee un decimal
// Importante: Consumir el salto de línea pendiente después de nextInt/nextDouble
sc.nextLine();
// 5. Cerrar el Scanner
sc.close();
}
}
Métodos comunes de Scanner
| Método | Descripción |
|---|---|
nextLine() | Lee una línea completa (String). |
next() | Lee una palabra (hasta espacio). |
nextInt() | Lee un número entero. |
nextDouble() | Lee un número decimal. |
nextBoolean() | Lee un booleano. |
2. Métodos esenciales de String
La clase String es inmutable y tiene muchos métodos útiles. Aquí los más importantes.
length() – Longitud del string
Devuelve un entero con el número de caracteres del texto (cuenta espacios).
String texto = "Hola mundo";
int longitud = texto.length(); // 10
charAt(index) – Carácter en una posición
Devuelve el caracter que hay en la posición indicada en tecto.charAt(posición).
char letra = texto.charAt(0); // 'H'
char ultima = texto.charAt(texto.length() - 1); // 'o'
⚠️ IMPORTANTE En Java se empieza a contar desde 0. Por lo que la primera posición es 0, la segunda es 1, la tercera es 2...
toLowerCase() / toUpperCase() – Convertir a minúsculas/mayúsculas
Convierte el texto a mayúsculas o minúculas.
String minus = texto.toLowerCase(); // "hola mundo"
String mayus = texto.toUpperCase(); // "HOLA MUNDO"
substring(inicio) / substring(inicio, fin) – Extraer parte
Extrae un "trozo" del texto. Podemos indicarle un solo índice, y cortará el texto desde esa posición haste el final:
String sub1 = texto.substring(5); // "mundo" (desde índice 5 hasta el final)
O indicarle dos índices:
- El inicio
- El final
Y cortará el texto desde la posición inicio hasta la posición final:
String sub2 = texto.substring(0, 4); // "Hola" (índice 0 a 3)
indexOf(String) / lastIndexOf(String) – Buscar posición
Estos métodos devuelven un entero con la posción de cierta palabra o letra en el texto.
int pos1 = texto.indexOf("mundo"); // 5
int pos2 = texto.indexOf("x"); // -1 (no encontrado)
int pos3 = texto.lastIndexOf("o"); // 7 (última 'o')
equals() / equalsIgnoreCase() – Comparar contenido
Compara si dos textos con iguales, devolviendo un booleano. Muy útil en los if.
String a = "Java";
String b = "java";
boolean igual = a.equals(b); // false
boolean igualSinCase = a.equalsIgnoreCase(b); // true
contains() – Subcadena
Verifica si contiene una subcadena.
boolean tiene = texto.contains("mun"); // true
startsWith() / endsWith() – Verifica prefijo/sufijo
Verifica si el texto empieza o acaba con cierto trozo.
boolean empieza = texto.startsWith("Hol"); // true
boolean termina = texto.endsWith("ndo"); // true
trim() – Elimina espacios al inicio y final
Elimina espacios al inicio y final del texto. Muy útil ya que a veces los espacios "no se ven" y puede que estén, por lo que es recomendable después de un Scanner usar trim() para limpiar el texto de espacios.
String conEspacios = " Hola ";
String limpio = conEspacios.trim(); // "Hola"
replace() / replaceAll() – Reemplazar caracteres o subcadenas
Reemplaza dentro de un texto un caracter por otro.
La sintaxis es texto.replace(caracter_original, nuevo_caracter).
String reemplazo = texto.replace('o', 'a'); // "Hala munda"
String reemplazo2 = texto.replaceAll(" ", "_"); // "Hola_mundo"
3. Resumen rápido de métodos
| Método | Uso |
|---|---|
length() | número de caracteres |
charAt(i) | carácter en la posición i |
toLowerCase() / toUpperCase() | cambiar mayúsculas/minúsculas |
substring(i, j) | extraer desde i hasta j-1 |
indexOf(s) | primera posición de s, o -1 |
lastIndexOf(s) | última posición de s |
equals(s) | comparar exacto |
equalsIgnoreCase(s) | comparar sin distinguir mayúsculas |
contains(s) | ¿contiene s? |
startsWith(s) / endsWith(s) | ¿empieza/termina con s? |
trim() | eliminar espacios extremos |
split(regex) | dividir en arreglo |
replace(a, b) / replaceAll(regex, b) | reemplazar |