Temas:
Ejercicio:
Escribir un programa que lea una cantidad indeterminada de palabras (terminada en la palabra "fin") y escriba la palabra más larga y la mayor en orden lexicográfico.
Diálogo:
esta noche puedo escribir los versos más tristes fin
Observe la similitud de este programa con el programa
que calcula el máximo y mínimo de un conjunto de números
ingresados por el usuario (visto en una clase anterior).
String palabra= readString();
String mayor= palabra;
String maslarga= palabra;
while (compare(palabra, "fin")!=0) {
if (length(palabra)>length(maslarga))
maslarga= palabra;
if (compare(palabra,mayor)>0)
mayor= palabra;
palabra= readString();
}
print("Mayor= "); println(mayor);
print("Mas larga= "); println(maslarga);
Los strings se pueden concatenar con el operador +:
Por lo tanto, las dos últimas líneas se pueden reescribir como:
"hola" + "juan" es "holajuan"
"hola" + " " + "juan" es ("hola" + " ") + "juan" o "hola juan"
También se puede escribir cuán larga era una palabra:
println("Mayor= "+mayor);
println("Mas larga= "+maslarga);
Al hacer la parentización queda al último una expresión de tipo
string + una expresión entera. En este caso Java convierte
la expresión entera al string que representa el valor de la expresión
y luego realiza la concatenación. Por ejemplo:
println("El largo de "+maslarga+" es "+length(maslarga));
De ahora en adelante, cuando queramos desplegar un string seguido
de una valor numérico, preferiremos escribir en forma abreviada:
"numero= "+5 es "numero= 5"
""+123 es "123"
Por lo tanto debe tener mucho cuidado. A veces el operador +
significa suma (de enteros o de reales) y a veces concatenación
de strings. Es un error usar los operadores -, * o / con strings.
println("El numéro es "+num);
println("El rango es ["+min+","+max+"]");
Cada uno de los caracteres que forman un string tiene una posición en él. Por ejemplo se tiene el siguiente string:
String s= "abracadabra";
las posiciones son 0123456789
y 10
Se puede obtener un substring a partir de otro string usando la función substring. Por ejemplo:
String subs= substring(s,4,3);
El resultado de esta operación es que subs es "cad". Es importante notar que el substring entregado es también un String. La posición de la c es 0, la posición de la a es 1 y la posición de la d es 2. El largo del substring es 3.
También existe:
String resto= substring(s,4); // resto== "cadabra"
Ejercicio:
Reemplazar las letras a por e en el string s, dejando el resultado en t. Por ejemplo si s contiene "abracadabra", t deberá quedar como "ebrecedebre". Solución: Estudiar el siguiente programa.
Este programa es una nueva forma de acumulación. Antes de entrar
al ciclo, el string t está vacío. En la primera iteración contiene
el primer caracter de s ("a"). En la segunta, el primero y el
segundo ("ab") y en cada iteración se agrega un nuevo caracter, hasta
que al final t y s son el mismo string.
String t= "";
int i= 0;
while (i<length(s)) {
t= t+substring(s,i,1);
i= i+1;
}
Usamos el mismo patrón, solo que ahora antes de agregar un caracter nos fijamos si es una "a", en cuyo caso agregamo una "e" y no la "a":
Esa es la característica de los patrones. Todas sus formas se parecen,
pero siempre son diferentes de alguna forma.
String t= "";
int i= 0;
while (i<length(s)) {
if (compare(substring(s,i,1), "a")==0)
t= t+"e";
else
t= t+substring(s,i,1);
i= i+1;
}
Esto mismo se puede hacer más cómodamente con la función replace que reemplaza todas las ocurrencias de un substring dentro de un string mayor por otro substring. El ejercicio quedaría simplemente como:
String t= replace(s,"a","e");
Tarea:
Invertir los caracteres del string s, dejando el resultado en s. Por ejemplo si s contiene "roma", entonces t deberá quedar en "amor".
Indicación: cambie ligeramente el patrón de acumulación, de modo que en la segunda iteración t sea "ba" en vez de "ab". En la tercera, "rba", en la cuarta "arba", etc.