Documente Academic
Documente Profesional
Documente Cultură
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.
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.
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
System.out.println(Palabra3.charAt(7));
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;
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};
Como hemos comentado, rotar significa el mover un elemento a su posicin anterior. Esto lo podemos hacer con un bucle for:
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
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. }