Lunes 5 de Abril

Strings

Objetivos: Mostrar cómo se manipulan las cadenas de caracteres en Java.

Temas:


Solución del problema de la clase anterior:

    int num;
    int max;
    int min;
    print("? ");
    num= readInt();
    max= num;
    min= num;
    while (num!=0) {
      if (num>max) max= num;
      if (num<min) min= num;
      print("? ");
      num= readInt();
    }
    print("El rango es [");
    print(min); print(",");
    print(max); println("]");
Observe que las instrucciones que están en negritas corresponden a una variación del patrón de acumulación. No es exactamente el patrón de acumulación, pero se asemeja. Si hubiésemos escrito:

      max= max(max,num);
sería aún más parecido. El operador del patrón de acumulación sería en este caso max.

El programa también se puede escribir como:

    int num;
    int max= 0; // o MININT
    int min= MAXINT;
    print("? ");
    num= readInt();
    while ( ... ) { ... }
    ...
Ejecute paso a paso dos iteraciones de este programa y se convencerá de que está correcto. MAXINT es una constante entera que es más grande que cualquier otro entero en Java.

En realidad, los enteros en Java tienen un valor máximo (y un mínimo para los negativos). El primer número que se lea forzosamente será menor (o igual) a MAXINT y quedará por lo tanto almacenado en min ya en la primera iteración.


El tipo String

Así como en Java se pueden almacenar enteros en variables de tipo int o números reales en variables de tipo double, también se pueden almacenar secuencias de caracteres en variables de tipo String. ¡Cuidado! El tipo se escribe con la S mayúscula.

Un string es una secuencia de letras (a-z o A-Z), dígitos (0-9) o símbolos (% ^ & @ [ ] etc.).

Constantes:

En un programa se pueden escribir strings constantes encerrando los caracteres entre " ... ":

    "x ? "
    "Promedio= "
    "a"
    "123"
¡Cuidado! En un programa la constante 5 denota el entero 5, mientras que la constante "5" denota un string y por lo tanto no se puede operar aritméticamente.

Variables:

    String nombre; // sin inicialización
    String direccion= "Alameda 123";
    int edad;
Los valores que pueden almacenar las variables nombre y dirección deben ser strings, mientras que edad sólo puede almacenar enteros.

Asignación:

    nombre= "Juan Gonzalez";
    edad= 18;
    direccion= 123; // ¡Error!
    edad= "18";     // ¡Error!

Operaciones sobre strings

Lectura de un string desde el teclado:

    nombre= readString();
    direccion= readLine();
La función readString() lee una sola palabra (hasta encontrar un espacio en blanco o un cambio de línea). La función readLine lee hasta encontrar el cambio de línea. Los espacios forman parte del string leído. Por ejemplo, si el usuario ingresa:

    juan alameda 123
la variable nombre quedará con el string "juan" y dirección con "alameda 123".

Despliegue en pantalla:

    println(nombre);
    print(direccion);
    println("x");
desplegará:

    juan
    alameda 123x
En general, las funciones print y println despliegan expresiones de tipo String. En particular pueden desplegar una variable o una constante.

Largo de un string:

    int largo= length(nombre);
La función length entrega un entero que corresponde al número de caracteres contenidos en el string. Por ejemplo:

    length("abc") es 3
    length("a b c") es 5
    length("1 2 3 ") es 6
    length(123) es un error porque 123 no es un string
Observación: la constante "" denota el string vacío cuyo largo es 0.

Comparación:

Se puede comparar lexicográficamente dos strings. Diremos que "juan" es menor lexicográficamente que "pedro", porque aparece antes en el diccionario.

    if (compare(nombre1, nombre2)<0)
      print("menor");
    else if (compare(nombre1, nombre2)==0)
      print("iguales");
La función compare retorna -1 si el primer argumento es menor lexicográficamente que el segundo argumento, 0 si son iguales o 1 si el primero es mayor.


Tarea:

Haga un programa que lea palabras del teclado e indique el largo de cada una de ellas. El fin de las palabras está marcado por la palabra "fin". El diálogo debe ser:

Diálogo:

esta noche puedo escribir los versos más tristes fin
largo de esta: 4
largo de noche: 5
...
largo de tristes: 7