Sunteți pe pagina 1din 8

Manejo De Cadenas En Java, Operaciones Con Palabras

Muchas de las operaciones bsicas con cadenas (String's) cuando estamos aprendiendo a programar son las operaciones con las palabras en una cadena, problemas como: contar cuantas palabras tiene una cadena, eliminar la k-sima palabra, invertir todas las palabras, etc. Ahora mostraremos los algoritmos de problemas clsicos resueltos de una forma nativa, ya que sabemos que Java tiene una infinidad de mtodos en la clase String para manejar cadenas, pero haremos uso de las 3 mas bsicas que son:

length() retorna el numero de caracteres de una cadena (String) charAt(posicion) retorna un carcter (char) de la posicion en la cadena. substring(inicio, fin) retorna una subcadena extrada de una cadena dada la posicin de inicio y fin.

Con estos mtodos bsicos podemos hacer cualquier operacin con cadenas (String's) ademas de ayuda podemos utilizar tambin el mtodo trim() que elimina todos los espacios (carcter espacio) de adelante y del final de una cadena. Bien, ahora entremos en tema, lo primero que tenemos que saber es como detectar una palabra, de la forma mas sencilla una cadena puede ser "Hola amigos espero que estn bien" que tiene 6 palabras, ademas observen que tiene 5 caracteres espacio, entonces podramos decir que para detectar palabras nos enfocaremos en los espacios.

Contar Cuantas Palabras Tiene Una Cadena


Si tenemos la cadena "Hola amigos espero que estn bien" tiene 5 espacios entonces que tal si contamos cuantos espacios existen y le sumamos uno, esa podra ser una solucin correcta, pero para otras operaciones mas complejas se aconseja adicionar o concatenar un espacio mas al final de la cadena teniendo asi "Hola amigos espero que estn bien " entonces una vez concatenado contaremos los espacios y sern 6, que representa 6 palabras, el cdigo Java es el siguiente. ? 1 2 public static int contarPalabras(String cadena) { cadena += " "; 3 int c = 0; 4 for (int i = 0; i < cadena.length(); i++) { 5 if (cadena.charAt(i) == ' ') { c++; 6 } 7 } 8 return c; 9 } 10

Eliminar

La

K-sima

Palabra

De

Una

Cadena

Primero necesitamos una nueva cadena donde se ira almacenando la cadena menos la palabra a eliminar, entonces lo que tenemos que hacer es tambin almacenar palabra por

palabra en una variable y esto para concatenar a la nueva cadena pero menos una (la que tenemos que eliminar) logrando asi que estn en la nueva cadena todas las palabras menos una, para ello tambien necesitamos contar cada vez que encontremos una palabra, el cdigo Java es el siguiente. ? 1 2 public static String eliminarPalabra(String cadena, int k) { cadena += " "; 3 String nuevaCadena = ""; 4 int c = 0; 5 String palabra = ""; for (int i = 0; i < cadena.length(); i++) { 6 palabra += cadena.charAt(i); 7 if (cadena.charAt(i) == ' ') { 8 c++; 9 if (c != k) { 10 nuevaCadena += palabra; } 11 palabra = ""; 12 } 13 } 14 return nuevaCadena.trim(); 15} 16 17
smn ,, disculpe lo q paso s q me dio iras leer eso xq siemple s lo mismo cn sus indirectas ahh y ps ud nunca me ah dicho n la cara siempre prefiere hacerme quedar mal ante todos prro bno ya no va pasar,,, y la verdad si dije eso fue x la diana aunq solo fue x joda,,, perdon perdn

Invertir

Las

Palabras

De

Una

Cadena

El truco para invertir una cadena es en la concatenacin, la concatenacin por izquierda, es decir si nosotros tenemos la cadena "abc" y hacemos la siguiente operacin 'x' + "abc", tenemos "xabc" y as si extraemos carcter por carcter y lo concatenamos por izquierda ya tenemos la cadena invertida, lo mismo hay que hacer pero palabra por palabra, detectando palabras y almacenndolas inversamente y luego recien concatenar la palabra a la nueva cadena, el cdigo Java es el siguiente. ? 1 public static String invertirPalabras(String cadena) { cadena += " "; 2 String palabra = ""; 3 String nuevaCadena = ""; 4 for (int i = 0; i < cadena.length(); i++) { 5 palabra = cadena.charAt(i) + palabra; if (cadena.charAt(i) == ' ') { 6 nuevaCadena += palabra; 7 palabra = ""; 8 } 9 } 10 return nuevaCadena.trim(); 11}

12 13 Como podemos ver tambin se utilizo la funcin trim() para eliminar los espacios sobrantes en las cadenas resultantes.

Java: Manejo de Cadenas. Mtodo String.split().


En Java el mtodo split(String regEx) nos permite dividir una cadena en base a las ocurrencias de una expresin regular definida dentro. Ya que es una expresin regular puede ser simplemente una letra, coma, signo o una construccin mas elaborada. Hay que tomar en cuenta que existen smbolos especiales en las expresiones regulares como el punto, el signo ms, los corchetes, etc. No se pueden agregar literalmente ya que dan problema. En caso de querer usarlos como cadenas se debe indicar usando \\. Por ejemplo \\. \\+ \\[ etc. A continuacin cdigo para ejemplificar el mtodo:
public class SplitExample { public static void main(String[] args) { //Se puede dividir por medio de comas o palabras String dias = "Lunes,Martes,Miercoles,Jueves,Viernes,Sabado,Domingo"; String diaArray[] = dias.split(","); System.out.println("--Ejemplo 1--"); for(String dia : diaArray){ System.out.println(dia); } //El punto se usa en las expresiones regulares por lo que //si se desea usar como tal se debe definir con \\ //Otros valors son + [ ] ? etc. String diasPunto = "Lunes.Martes.Miercoles.Jueves.Viernes.Sabado.Domingo"; String diaPuntoArray[] = diasPunto.split("\\."); System.out.println("--Ejemplo 2--"); for(String diaPunto : diaPuntoArray){ System.out.println(diaPunto); } //Se pueden usar expresiones mas compleajas como la siguiente que busca //dominios .com String correos = "test1@dominio.com,test2@dominio.com,test3@dominio2.com,test4@dominio. net"; String regEx = "@[A-Za-z0-9]+\\.com"; System.out.println("--Ejemplo 3--");

for(String correoSinDominio : correos.split(regEx)){ System.out.println(correoSinDominio); } } }

String Palabra1="Kevin "; String Palabra2="Arnold "; System.out.println(Palabra1+Palabra2); 2. Mediante el mtodo concat

System.out.println(Palabra1.concat(Palabra2)); Los cuales daran como resultado respectivamente lo siguiente Kevin Arnold Kevin Arnold

LONGITUD DE UNA CADENA


La longitud de una cadena podemos obtener con el mtodo length() de la siguiente manera String Palabra3="Midiendo mi longitud"; System.out.println(Palabra3.length());

CADENA A MAYSCULA O MINSCULA


Si queremos convertir una cadena completa a minsculas hagamos de la siguiente forma System.out.println(Palabra3.toLowerCase()); Para maysculas sera lo siguiente System.out.println(Palabra3.toUpperCase());

CARCTER POR INDICE


Obtengamos el carcter de la posicin 7 considerando que las cadenas empiezan desde la posicin 0

System.out.println(Palabra3.charAt(7));

NDICE POR CARCTER


Para saber qu posicin usa una letra podemos usar la siguiente funcin considerando que retornara la posicin del primer carcter encontrado con el valor que le pasemos System.out.println(Palabra3.indexOf('e')); Si pondramos una palabra completa en el valor enviado nos retornara el ndice del primer carcter de la palabra encontrada, si lo hubiera. Por ejemplo System.out.println(Palabra3.indexOf("longitud")); Esto nos retornara 12 ya que en la Palabra3 tenemos la cadena Midiendo mi longitud y la palabra longitud identifica el inicio del mismo

SUB CADENAS O SUBSTRING


Aqu veamos la forma de obtener cierta porcin de una cadena, por ejemplo. Si quisiramos la palabra longitud de la cadena Palabra3 lo obtendramos de la siguiente manera System.out.println(Palabra3.substring(12, Palabra3.length())); El primer valor dentro de substring es 12 ya que la palabra longitud empieza en ese punto y luego se pasa el valor Palabra3.length lo cual retornara la longitud de Palabra3 es decir hasta el final as obteniendo la porcin que se desea obtener dara el mismo resultado si pondramos System.out.println(Palabra3.substring(12, 20));

Manejo de String en Java


Para familiarizarnos con el manejo de strings en Java, as como con los mtodos de los que disponemos para tratar con ellos, vamos a crear una funcin censura(String texto, String tabu, int tipo) que comprueba si un texto contiene una subcadena tab y de ser as tiene tres opciones:

Si tipo es 0 devuelve el texto sin la cadena tab. Si tipo es 1 devuelve el texto con los caracteres correspondientes a la cadena tab sustituidos por asteriscos, tantos asteriscos como caracteres tenga tab. Si tipo es cualquier otro valor no hace nada.

En primer lugar definimos la cabecera de la funcin, que recibe tres variables por parmetro: texto, tabu y tipo. Texto va a contener el texto en el que vamos a comprobar si est la cadena tabu o no, por lo tanto ambas variables sern de tipo String. Tipo contiene el valor que nos va a indicar qu hacer con la cadena, por lo tanto ser de tipo int(entero). String censura(String texto, String tabu, int tipo){ A continuacin comprobamos mediante el mtodo contains() si la cadena tab se encuentra en texto. Este mtodo devuelve True si se encuentre la cadena y False en caso contrario. if (texto.contains(tabu)) { Si la cadena tab est contenido en texto pasamos a averiguar en qu parte del mismo se encuentra, para ello definimos las variables inicio y fin.Inicio contendr el ndice en el que empieza la cadena dentro del texto y fin el ndice de la ltima letra de la cadena tab. int inicio = texto.indexOf(tabu); int fin = inicio + tabu.length(); Una vez tenemos delimitada la cadena dentro del texto creamos un StringBuffer, que nos va a servir en caso de que haya que modificar el texto. StringBuffer aux = new StringBuffer(); A continuacin comprobamos el valor de tipo para saber que debemos hacer con el texto, para ello usamos un switch. switch(tipo) { En caso de que tipo valga 0 se debe devolver el texto sin la cadena tab, para ello vamos a concatenar la parte del texto anterior a inicio con la parte posterior a fin, usando el mtodo substring que devuelve la parte de una cadena comprendida entre dos ndices. case 0 : return texto.substring(0,inicio).concat(texto.substring(fin)); Cabe destacar que usamos un nico parmetro en el segundo substring puesto que si no se indica se considera que la subcadena ir desde el ndice hasta el final de la misma. En caso de que tipo valga 1 se devuelve el texto con la cadena tab sustituida por asteriscos, para ello rellenaremos el StringBuffer creado anteriormente con tantos asteriscos como letras contenga la palabra tab y luego lo reemplazaremos en el texto gracias a la funcin replace(). case 1 : for (int i = 0; i < tabu.length(); i++) aux.append('*'); return texto.replace(tabu, aux); Si tipo toma cualquier otro valor no se hace nada, puesto que se devolver la cadena de

texto tal cual. default : ; Finalmente cerramos el switch y el if y devolvemos el texto. return texto; El cdigo final queda por lo tanto de la siguiente forma: String censura(String texto, String tabu, int tipo){ if (texto.contains(tabu)) { int inicio = texto.indexOf(tabu); int fin = inicio + tabu.length(); StringBuffer aux = new StringBuffer(); switch(tipo) { case 0 : return texto.substring(0,inicio).concat(texto.substring(fin)); case 1 : for (int i = 0; i < tabu.length(); i++) aux.append('*'); return texto.replace(tabu, aux); default : ; return texto;

Java Rotar un array


septiembre 21, 2010 por Vctor Cuervo 4 Comentarios Imprimir

Lo que pretendemos hacer con el siguiente cdigo es rotar los elementos dentro de un array con Java. Es decir, pasar cada elemento a su posicin anterior y el primer elemento a la ltima posicin. Es decir, si tenemos un array de enteros...
1. int[] numeros = {1,2,3,4,5};

Conseguir que salgan las secuencias...


{1,2,3,4,5} {2,3,4,5,1} {3,4,5,1,2} {4,5,1,2,3} {5,1,2,3,4}

Como hemos comentado, rotar significa el mover un elemento a su posicin anterior. Esto lo podemos hacer con un bucle for:

1. for(int x= 0; x<numeros.length-1; x++) 2. numeros[x] = numeros[x+1];

Apreciar que solo se mueve hasta el tamao-1. Para no caer en una excepcin ArrayIndexOutOfBoundsException. Y es que la ltima posicin de array se la asignaremos al primero. Para ello hay que tener en cuenta dos acciones.
1. Guardarnos el primer elemento antes de entrar al bucle. Ya que en la primera iteracin lo vamos a machacar 2. Asignar el primer elemento a la ltima posicin, una vez que hayamos salido del bucle

El cdigo completo sera el siguiente:


1. 2. 3. 4. 5. 6. 7. int primero = numeros[0]; int x; for(x= 0; x<numeros.length-1; x++) numeros[x] = numeros[x+1]; numeros[x]= primero;

Encapsulamos todos esto en un mtodo...


1. public static int[] rotar(int[] numeros){ 2. int primero = numeros[0]; 3. int x; 4. 5. for(x= 0; x<numeros.length-1; x++) 6. numeros[x] = numeros[x+1]; 7. 8. numeros[x]= primero; 9. }

Y ahora utilizamos un bucle que llame al mtodo rotar() para obtener todas las combinaciones posibles:
1. for (int x=0;x<numeros.length;x++) { 2. // Imprimir el array 3. rotar(numeros); 4. }

S-ar putea să vă placă și