05 – Funciones básicas con cadenas

19/Sep/2009 Java , , , , , , , , , , , , , , , , , , , , , , , , , 25 Comentarios


Una vez que hemos visto lo sencillo que es crear una cadena de texto vamos a echar un vistazo a los métodos que nos permiten manipular la cadena de texto.

Si tuviésemos que ordenar dichos métodos podríamos llegar a la siguiente división:

  • Información básica de la cadena
  • Comparación de Cadenas
  • Búsqueda de caracteres
  • Búsqueda de subcadenas
  • Manejo de subcadenas
  • Manejo de caracteres
  • Conversión a String: valueOf()

Información básica de la cadena

.length()
Nos devuelve el tamaño que tiene la cadena.

char charAt(int index)
Devuelve el carácter indicado como índice. El primer carácter de la cadena será el del índice 0. Junto con el método .length() podemos recuperar todos los caracteres de la cadena de texto.

Hay que tener cuidado. Ya que si intentamos acceder a un índice de carácter que no existe nos devolverá una excepción IndexOutOfBoundsException.

Comparación de Cadenas

Los métodos de comparación nos sirven para comparar si dos cadenas de texto son iguales o no. Dentro de los métodos de comparación tenemos los siguientes:

boolean equals(Object anObject)
Nos permite comparar si dos cadenas de texto son iguales. En el caso de que sean iguales devolverá como valor "true". En caso contrario devolverá "false".

Este método tiene en cuenta si los caracteres van en mayúsculas o en minúsculas. Si queremos omitir esta validación tenemos dos opciones. La primera es convertir las cadenas a mayúsculas o minúsculas con los métodos .toUpperCase() y .toLowerCase() respectivamente. Métodos que veremos más adelante.

La segunda opción es utilizar el método equalsIgnoreCase() que omite si el carácter está en mayúsculas o en minúsculas.

boolean equalsIgnoreCase(String anotherString)
Compara dos cadenas de caracteres omitiendo si los caracteres están en mayúsculas o en minúsculas.

int compareTo(String anotherString)
Este método es un poco más avanzado que el anterior, el cual, solo nos indicaba si las cadenas eran iguales o diferentes

En este caso compara a las cadenas léxicamente. Para ello se basa en el valor Unicode de los caracteres.

Se devuelve un entero menor de 0 si la cadena sobre la que se parte es léxicamente menor que la cadena pasada como argumento. Si las dos cadenas son iguales léxicamente se devuelve un 0. Si la cadena es mayor que la pasada como argumento se devuelve un número entero positivo.

Pero que es esto de “mayor, menor o igual léxicamente”. Para describirlo lo veremos con un pequeño ejemplo.

  1. s1 = "Cuervo"
  2. s2 = "Cuenca"
  3. s1.compareTo(s2);

Compararíamos las dos cadenas. Los tres primeros caracteres son iguales "Cue". Cuando el método llega al 4 carácter tiene que validar entre la r minúscula y la n minúscula. Si utiliza el código Unicode llegará a la siguiente conclusión.

  1. (114) > n(110)

Y nos devolverá la resta de sus valores. En este caso un 4.

Hay que tener cuidado, porque este método no tiene en cuenta las mayúsculas y minúsculas. Y dichos caracteres, aún siendo iguales, tienen diferentes código. Veamos la siguiente comparación

  1. s1 = "CueRvo"
  2. s2 = "Cuervo"
  3. s1.compareTo(s2);

Nuevamente los tres caracteres iniciales son iguales. Pero el cuarto es distinto. Por un lado tenemos la r minúscula y por otro la r mayúscula. Así:

  1. R(82) < r(114)

¿Qué entero nos devolverá el método compareTo()? ¿-32?

int compareToIgnoreCase(String str)
Este método se comportará igual que el anterior. Pero ignorando las mayúsculas. Todo un alivio por si se nos escapa algún carácter en mayúsculas 😉

Otros métodos para la comparación de cadenas son:

  1. boolean regionMatch( int thisoffset,String s2,int s2offset,int len );
  2. boolean regionMatch( boolean ignoreCase,int thisoffset,String s2, int s2offset,int 1 );

Búsqueda de caracteres

Tenemos un conjunto de métodos que nos permiten buscar caracteres dentro de cadenas de texto. Y es que no nos debemos de olvidar que la cadena de caracteres no es más que eso: una suma de caracteres.

int indexOf(int ch)
Nos devuelve la posición de un carácter dentro de la cadena de texto. En el caso de que el carácter buscado no exista nos devolverá un -1. Si lo encuentra nos devuelve un número entero con la posición que ocupa en la cadena.

int indexOf(int ch, int fromIndex)
Realiza la misma operación que el anterior método, pero en vez de hacerlo a lo largo de toda la cadena lo hace desde el índice (fromIndex) que le indiquemos.

int lastIndexOf(int ch)
Nos indica cual es la última posición que ocupa un carácter dentro de una cadena. Si el carácter no está en la cadena devuelve un -1.

int lastIndexOf(int ch, int fromIndex)
Lo mismo que el anterior, pero a partir de una posición indicada como argumento.

Búsqueda de subcadenas

Este conjunto de métodos son, probablemente, los más utilizados para el manejo de cadenas de caracteres. Ya que nos permiten buscar cadenas dentro de cadenas, así como saber la posición donde se encuentran en la cadena origen para poder acceder a la subcadena.

Dentro de este conjunto encontramos:

int indexOf(String str)
Busca una cadena dentro de la cadena origen. Devuelve un entero con el índice a partir del cual está la cadena localizada. Si no encuentra la cadena devuelve un -1.

int indexOf(String str, int fromIndex)
Misma funcionalidad que indexOf(String str), pero a partir de un índice indicado como argumento del método.

int lastIndexOf(String str)
Si la cadena que buscamos se repite varias veces en la cadena origen podemos utilizar este método que nos indicará el índice donde empieza la última repetición de la cadena buscada.

lastIndexOf(String str, int fromIndex)
Lo mismo que el anterior, pero a partir de un índice pasado como argumento.

boolean startsWith(String prefix)
Probablemente mucha gente se haya encontrado con este problema. El de saber si una cadena de texto empieza con un texto específico. La verdad es que este método podía obviarse y utilizarse el indexOf(), con el cual, en el caso de que nos devolviese un 0, sabríamos que es el inicio de la cadena.

boolean startsWith(String prefix, int toffset)
Más elaborado que el anterior, y quizás, y a mi entender con un poco menos de significado que el anterior.

boolean endsWith(String suffix)
Y si alguien se ha visto con la necesidad de saber si una cadena empieza por un determinado texto, no va a ser menos el que se haya preguntado si la cadena de texto acaba con otra.

De igual manera que sucedía con el método startsWith() podríamos utilizar una mezcla entre los métodos .indexOf() y .length() para reproducir el comportamiento de .endsWith(). Pero las cosas, cuanto más sencillas, doblemente mejores.

Métodos con subcadenas

Ahora que sabemos como localizar una cadena dentro de otra seguro que nos acucia la necesidad de saber como substraerla de donde está. Si es que no nos podemos estar quietos...

String substring(int beginIndex)
Este método nos devolverá la cadena que se encuentra entre el índice pasado como argumento (beginIndex) hasta el final de la cadena origen.

Así, si tenemos la siguiente cadena:

  1. String s = "Víctor Cuervo"

El método…

  1. s.substring(7)

Nos devolverá “Cuervo”.

String substring(int beginIndex, int endIndex)
Si se da el caso que la cadena que queramos recuperar no llega hasta el final de la cadena origen, que será lo normal, podemos utilizar este método indicando el índice inicial y final del cual queremos obtener la cadena.

Así, si partimos de la cadena...

  1. String s = "En un lugar de la mancha...."

El método...

  1. s.substring(6,11)

Nos devolverá la palabra “lugar”.

Hay que tener especial cuidado ya que es un error muy común el poner como índice final el índice del carácter último de la palabra a extraer. Cuando realmente es el índice + 1 de lo que queramos obtener.

Manejo de caracteres

Otro conjunto de métodos que nos permite jugar con los caracteres de la cadena de texto. Para ponerles en mayúsculas, minúsculas, quitarles los espacios en blanco, reemplazar caracteres,....

String toLowerCase();
Convierte todos los caracteres en minúsculas.

String toUpperCase();
Convierte todos los caracteres a mayúsculas.

String trim();
Elimina los espacios en blanco de la cadena.

String replace(char oldChar, char newChar)
Este método lo utilizaremos cuando lo que queramos hacer sea el remplazar un carácter por otro. Se reemplazarán todos los caracteres encontrados.

Conversión a String: valueOf()

Un potente conjunto de métodos de la clase String nos permite convertir a cadena cualquier tipo de dato básico: int, float, double,…

Esto es especialmente útil cuando hablamos de números. Ya que en múltiples ocasiones querremos mostrarles como cadenas de texto y no en su representación normal de número.

Así podemos utilizar los siguientes métodos:

04 - Clase String: Representando una cadena
Arrays en Java

Difunde el Conocimiento

Si te ha gustado el artículo o te ha sido de utilidad, no dejes de compartirlo con tus amigos en las redes sociales... Te estaremos muy agradecidos. :-D

25 comentarios en “05 – Funciones básicas con cadenas”

Víctor Cuervo

ulises Scc

¿Cómo ordenar una cadena que llenamos de números? sin usar vectores
public class ordenar {
public static void main(String[]args){
Scanner xx=new Scanner(System.in);
String num,n=””;
System.out.println();
num=xx.next();
int i=0;
while(i<num.length()){
if(Character.isDigit(num.charAt(i)))
{
n+=num.charAt(i);
}
i++;
}
int nu=Integer.parseInt(n);
}
}

Víctor Cuervo

jaime

Amigos que significa el null point Deference en java yo uso Netbeans para Programar en la Universidad Muchas Gracias por su Respuesta.

Víctor Cuervo

jaime

Hola necesito saber como buscar un nombre en un Arraylist de contactos, donde el para,metro que paso es una letras y que por esa misma letra me imprima o muestre todos los contactos que tengo en ese Arraylist esto es lo que tengo pero no me imprrime bie y no se por que si aparentemente no me muestra erroro ni nada ?

public Agenda BuscarPorLetras(String letras) throws Exception{
Agenda b = new Agenda();

for (int i = 0; i < listacontactos.size(); i++) {
if (letras.equals(listacontactos.get(i).getNombre().startsWith(letras))) {
b.adicionarContacto(listacontactos.get(i));
}
}
// b.adicionarContacto(listacontactos.get(i));
return b;

}

Víctor Cuervo

sandra

Hola yo necesito un programa que leyendo un archivo de texto que comienza por un espacio y despues contenga dos cadenas sea correcto de lo contrario me marque un error. Me podrias ayudar porfas

Víctor Cuervo

Víctor Cuervo

Hoal Sandra,

El ejemplo de cómo leer un fichero de texto lo tienes en http://lineadecodigo.com/java/leer-fichero-de-texto-con-java/ Te explica de una manera sencilla como leer el con tenido de un fichero y dejarlo en un String.

Luego de esa cadena tienes que contar las palabras. Para ello debes apoyarte en un StringTokenizer. El siguiente ejemplo http://lineadecodigo.com/java/contar-palabras-en-java/ te explica como coger ese texto leido del fichero y contarle las palabras.

Juntando los dos ejemplos tienes resuelto tu problema. Espero que te haya orientado.

Saludos.

Víctor Cuervo

Robert

Alguien podría ayudarme con este ejercicio

Realice un método que reciba un String como parámetro que indique el tamaño del Stringy después lo despliegue letra por letra.Haga un llamado al método sin crear un objeto.

Esto es lo que llevo.

public class tamañostring {
public void static taller(String r) {
for (int a = 0; a < r.length(); a++) {
char letra = r.charAt(a);
System.out.println("letra");
}
System.out.println("");
System.out.println("Hay" + r.length() + "letras");
}
}

Víctor Cuervo

Víctor Cuervo

Buenas,

No ibas muy desencaminado. Tienes que tener cuidado con las definiciones de los métodos. Sería:

public static void taller(String r) {}

A la hora de imprimir la letra, tienes que imprimir la variable letra que es la que lo contiene, no el texto “letra”. Es decir, sin comillas:

System.out.println(letra);

Y no es recomendable que utilices la ñ. Aunque tampoco es un fallo.
Te dejo el código completo:

public class Recorrer {
	

	public static void taller(String r) {

		for (int a = 0; a < r.length(); a++) {
			char letra = r.charAt(a);
			System.out.println(letra);
		}
		
		System.out.println("Hay " + r.length() + " letras");
	}


	public static void main(String[] args) {

		String sPalabra = "Avión";
		taller(sPalabra);

	}

}

Espero que te ayude. Saludos.

Víctor Cuervo

Víctor Cuervo

Víctor Cuervo

manualweb

@holderlin,

El ejemplo para extraer los dígitos de una cadena lo tienes explicado en http://lineadecodigo.com/java/digitos-de-un-numero/

Espero que te sirva de ayuda.

Víctor Cuervo

holderlin

disculpe quisiera saber con que funcion aria para separar digitos

Víctor Cuervo

made

Hola, tengo un problema con un programa de Java y no se como resolverlo.
Tengo que crear un programa que determine en que año naciste, el dia y el mes, como tiene que ver el mes en que naciste tambien tiene que ver si naciste en un año bisiesto, no se como poner eso ultimo, gracias por la ayuda

Víctor Cuervo

Fernando Reich

Escribo en este foro para pedir ayuda en un script Java que me permita resolver el siguinete problema de manejo de strings:

Variable [texto]

Si el string: [href=”http://en.wikipedia.org/wiki/”] existe en la variable [texto] y si [href=”http://en.wikipedia.org/wiki/] + los 5 caracteres siguientes es diferente a [href=”http://en.wikipedia.org/wiki/File]

Entonces: Remplaza todo lo que esta a la derecha de [href=”] hasta [“] por [#]

Si no: No hacer nada.

El script tiene que hacer eso hasta que recorra toda la variable [texto].

Saludos y gracias de ante mano por la buena voluntad

Víctor Cuervo

manualweb

@koco9,

Me alegro que te haya gustado el artículo. 😀

Víctor Cuervo

koco9

UPS DISCULPA LA FALTA DE ORTOGRAFIA “inegeniero” , sigue asi excelente post

Víctor Cuervo

koco9

UPS PERDON LA FALTA DE ORTOGRAFIA “inegeniero” , excelente post de verdad sigue asi

Víctor Cuervo

koco9

Acabas de enseñar a un futuro inegeniero si dios quiere, mis respetos hermano maravilloso el post

Víctor Cuervo

Marilu

¿Como traspaso una cadena desde asp a javascript sin perder los espacios en blanco?

si traspaso la cadena “Hola Mundo” a la otra página llega como “HolaMundo”

Gracias por la ayuda

Víctor Cuervo

ricardo

que barbaro!! que informacion tan cmpleta y tan clara, mis mas sinceras felicitaciones, he entendido a la perfeccion y a detalle toda la informacion y me acabas de hacer sacar un 100 en el examen. Muchas gracias!

Víctor Cuervo

ricardo

q

Víctor Cuervo

Juan

Gracias man por esto ta buenazooooooo!!!!!!!!

Víctor Cuervo

elrondd

gracias por los metodos para cadenas es justo lo que buscaba aki le entendi mejor que a mi profe jeje gracias por subirlo

Víctor Cuervo

CuantunRex

wean men buscaba esta pa saber las funciones xvre he!!

Víctor Cuervo

Jonathan Isla

Muy bueno, me ha servido demasiado.. todo claro y fácil de entender. =)

Víctor Cuervo

manualweb

@q,

gracias por el comentario. Espero que te haya servido de ayuda.

Víctor Cuervo

q

exelente

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*