La Clase String - Instituto Nobel

Anuncio
La Clase String
Un objeto String tiene la cualidad de ser un objeto que no cambia (inmutable) . Esto quiere
decir que una vez que es instanciado, no puede cambiar su estado. Por ejemplo en el siguiente
código:
String unaCadena = "
Instituto Nobel
";
unaCadena.trim(); //método para acortar los espacios
System.out.println(unaCadena);
La cadena no ha cambiado. Si quisiéramos que “cambie”, debemos hacer lo siguiente:
String unaCadena = "
Instituto Nobel
unaCadena = unaCadena.trim();
System.out.println(unaCadena);
";
En realidad lo que estamos haciendo ahora, es usar una copia del objeto y modificándolo Pero
habremos usado dos objetos para lograr esto.
Sin embargo hay alguna que otra excepción. Por ejemplo cuando se concatenan varios literales
o constantes con el operador +, el compilador es suficientemente inteligente para crear un
solo objeto String. Ejemplo:
public class EjemploString {
public static void main(String[] args) {
final String ESPACIO = " ";
String s = "Hola" + ESPACIO + "Mundo";
}
}
En resumen:
•
•
•
Si el texto no va a cambiar: String
Si el texto puede cambiar y sólo vamos a tener un hilo trabajando con la cadena:
StringBuilder.
Si el texto puede cambiar y vamos a tener más de un hilo trabajando con la
cadena: StringBuffer.
¿Cuál es la diferencia entre un StringBuilder y un StringBuffer?
La diferencia entre un StringBuilder y un StringBuffer es que un StringBuffer provee métodos
sincronizados por lo que es seguro usarlos en un ambiente multi-hilos. Los métodos son
sincronizados donde sea necesario, para que las operaciones en cualquier instancia de un
StringBuffer puedan comportarse como si ocurrieran en serie de manera consistente con el
orden de las llamadas a los métodos hechas por cada hilo.
Generalmente es más común el uso de StringBuilder. Usar StringBuffer en un ambiente de un
solo hilo de ejecución no tiene sentido, y al tener métodos sincronizados, es más lenta en
general.
Ejemplos:
// creamos un StringBuffer vacío
StringBuffer sb = new StringBuffer();
// el tamaño va aumentando a medida que vayamos añadiendo caracteres
// el método append convierte automáticamente cualquier tipo en String (llamando al
método toString())
sb.append("Esto es una prueba");
// también podemos insertar en una posición determinada
sb.insert(4, " no"); // sb = "Esto no es una prueba"
// o borrar trozos de la cadena
sb.delete(4, 11); // sb = "Esto prueba"
// es posible hacer esto también
sb.append("Esto ").append("es ").append("una prueba");
public class StringBuilderDemo {
public static void main(String[] args) {
String palindrome = " Somos o no somos";
StringBuilder sb = new StringBuilder(palindrome);
sb.reverse(); // revertirlo
System.out.println(sb);
}
}
Usando recursos string con Android
Se pueden cargar strings desde el archive de recursos en Android, por ejemplo puede cargar el
nombre de la aplicación desde un string almacenado en un recurso:
String strAppName = getResources().getString(R.string.nombre_aplicacion);
Para poder realizer esto tendremos que tener en /res/values un archive llamado
/res/value/strings.xml definido de la siguiente manera:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="nombre_aplicacion">Curso de Android Instituto Nobel!</string>
</resources>
Esta técnica es especialmente utilizada en las aplicaciones que dan la posibilidad de ser
utilizadas en distintos idiomas.
Iteración de cadena simple
Veamos las funciones disponibles dentro de la clase String.
Es útil saber que una variable del tipo string puede ser recorrida carácter a carácter con un
ciclo For o While para ello usamos el método length de la clase string, y para saber cual es el
carácter según su índice podemos usar charAt.
Además podemos saber la posición de una letra con palabra.indexOf(letra, pos);
Mayúsculas y Minúsculas
String enMayusculas = tucadena.toUpperCase();
String enMinusculas = tucadena.toLowerCase();
Splitting
Se utiliza para obtener una lista de subcadenas dentro de una cadena.
String colores = "Rojo Anaranjado Amarillo Verde Azul Marron";
String aColores[] = colores.split(" ");
El array obtenido es el siguiente:
aColors[0]=Rojo
aColors[1]=Anaranjado
aColors[2]=Amarillo
aColors[3]=Verde
aColors[4]=Azul
aColors[5]=Marron
Comparación Simple
Para comparar cadenas usamos el método compareTo() el cual es case sensitive, es decir que
tendrá en cuenta mayúsculas y minúsculas.
String vocales = "AEIOU";
if(vocales.compareTo("AEIOU") == 0 || vocales. compareToIgnoreCase ("aeiou")== 0) )
{
// las cadenas coinciden
} else {
// las cadenas no coinciden !
}
Búsqueda Simple
Si deseamos saber si una subcadena está contenida en una cadena hacemos lo siguiente:
String vocales = "AEIOU";
if( vocales.contains("IOU")==true )
…..
Uso de indexOf y substring
El método indexOf devuelve la primera aparición de una cadena dentro de un String. Si le
pasamos dos parámetros el primero será la cadena a buscar y el segundo la posición en la que
empezará a buscar.
El método substring devolverá una subcadena del String, desde la posición de inicio hasta la
posición de fin. Si sólo se especifica un parámetro la subcadena contendrá desde la posición de
inicio hasta el final de la cadena
Ejemplo:
String colores = "rojo,amarillo,verde,azul,morado,marrón";
int inicio = colores.indexOf(",");
int fin = colores.indexOf(",", inicio + 1);
System.out.println(colores.substring(inicio + 1, fin));
System.out.println(colores.substring(inicio));
La salida será:
amarillo
amarillo,verde,azul,morado,marrón
Uso valueOf
Este método obtiene el valor y lo convierte al tipo de dato indicado, por ejemplo:
integer.valueof(a); donde a podría ser un caracter
la funcion devuelve su valor en entero
String.Valueof(s) ; donde s es un entero
Y la funcion devuelve cadena
Ejercicio Práctico
“El ahorcado”
Cargar una lista de palabras en un array, la cantidad que deseen.
Obtener una palabra con una búsqueda aleatoria.
Armar un variable con tanta cantidad de *(o el símbolo que deseen ) como letras tenga la
palabra aleatoria encontrada.
Ingresar una letra y ver si se corresponde con alguna/s letra/s de la palabra aleatoria y
remplazarla en la variable con asterisco en el/los lugares correspondiente/s.
Contar la cantidad de intentos y la cantidad de errores; se finaliza el juego cuando se cometen
6 errores, o cuando se descubre la palabra.
Como mostrar un popup en android durante un tiempo:
Toast.makeText(getApplicationContext(),
"Fin del Juego", Toast.LENGTH_LONG).show();
Depurando con Log
import androi.util.Log;
...
Log.d("MiEtiqueta", "Se ha realizado la acción X");
Ayuda: pueden usar estas palabras:
“MARIPOSA","LAGUNA","REVERBERANTE","ALMOHADA","BARROCO","CASCADA",
"ALBORES","GIRASOL","NOGAL","SALAMANDRA","SOMBRIO","CLAUSTRO","ANZUELO",
"ALUMINIO","CARACOL","MANDARINA","SERENIDAD","ALMOHADA","CLARINETE",
"SONRISA","FASCINANTE","ATARDECER","LUSTRO","CABALLERIA","ANDALUZ","PERGAMINO",
"ALEVOSIA","SUGESTIVO","CHOCOLATE","TEMPESTAD","MILAGRO","COCHE",
"SUTIL","CIELO","CARACOLEAR","ESPACIO","PLURAL","BOREAL","ILOGICO",
"DESINHIBIDOR","LIBIDO","OBVIAMENTE","DUENDE","NATURALMENTE","CONSTIPADO","PULCRO","SENSATEZ","ESTUDIAR","CRI
ATURA","VIVIR","MUNDO","MARAVILLA","FORTUNA","ACOMODAR","GENERO","VIDA","NACIDO","EJEMPLO","DESTINADO","VOL
AR","PARTIR","ACOMODAR","PERFECTO","ESTE","FIN","AVE","LIGERO","POSIBLE","VOLUMINOSO","PULMONES","AIRE","GRANDE
","ESPACIO","HUECO","HUESOS",“EXTREMO","FUERTE","COMPARADO","PESO","FORMA","CUERPO","AFILADO","DELANTE","PRO
VISTO","SUAVE","PROPOSITO","VUELO","PLUMA","RESPONDER","ADMIRABLE","FIN","CREADAS","HALLAR","MARAVILLOSAMENT
E","ENGRASADAS","AGUA","DESCENDER","AVE","PESO","MUSCULOS","UTILIZAR","VUELO",”ENORME","PROPORCION","PESO","T
AMAÑO","CUERPO","ESTAR","DISPUESTO","MAYOR","RENDIMIENTO","EFECTIVO","MENOR","ESFUERZO","POSIBLE"
Descargar