Implementación de Aplicaciones Basadas en Texto
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Implementación de Aplicaciones Basadas en Texto

on

  • 6,036 views

 

Statistics

Views

Total Views
6,036
Views on SlideShare
6,002
Embed Views
34

Actions

Likes
0
Downloads
40
Comments
0

4 Embeds 34

http://www.slideshare.net 30
http://webcache.googleusercontent.com 2
http://static.slidesharecdn.com 1
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Objetivos Alcanzar un entendimiento sobre el mecanismo de entrada/salida estándar de Java Conocer clases avanzadas para la lectura de datos. La clase Scanner. Explicar la forma de declaración de métodos de argumento variable. Explicar la salida con formato en Tiger. La clase Formatter Describir la utilidad y métodos de las clases String, StringBuffer y StringTokenizer.
  • Entrada/Salida estándar Los usuarios de Unix, y aquellos familiarizados con las líneas de comandos de otros sistemas como DOS, han utilizado un tipo de entrada/salida conocida comúnmente por entrada/salida estándar . El fichero de entrada estándar ( stdin ) es simplemente el teclado. El fichero de salida estándar ( stdout ) es típicamente la pantalla (o la ventana del terminal). El fichero de salida de error estándar ( stderr ) también se dirige normalmente a la pantalla, pero se implementa como otro fichero de forma que se pueda distinguir entre la salida normal y (si es necesario) los mensajes de error. La clase System Java tiene acceso a la entrada/salida estándar a través de la clase System . En concreto, los tres ficheros que se implementan son: Stdin System.in implementa stdin como una instancia de la clase InputStream . Con System.in , se accede a los métodos read() y skip( ). El método read() permite leer un byte de la entrada. skip( long n ), salta n bytes de la entrada. Stdout System.out implementa stdout como una instancia de la clase PrintStream . Se pueden utilizar los métodos print() y println() con cualquier tipo básico Java como argumento. Stderr System.err implementa stderr de la misma forma que stdout. Como con System.out, se tiene acceso a los métodos de PrintStream.
  • Lectura de datos por teclado La clase InputStreamReader adapta la forma de lectura de datos, podríamos leer directamente datos del teclado byte a byte de la siguiente manera:
  • Lectura de datos con Scanner En el paquete java.util; se encuentra la clase Scanner. Se trata de un scanner de textos que parsea tipos primitivos y cadenas pudiendo usar expresiones regulares. Rompe la entrada usando como separador por defecto el espacio en blanco. Los tokens puede ser convertidos a sus correspondientes valores usando los diferentes tipos de métodos next. Si el método next no es capaz de realizar la conversión de manera adecuada se lanza una excepción no chequeable.
  • Varargs A partir del JDK 1.5 se incluye la posibilidad de Tratar con métodos de argumentos variables. Los métodos podrán admitir de 0 a N argumentos. Para ello usaremos los puntos suspensivos. “ Tipo .... nombre de la variable ”. Solo puede existir un parámetro de “...” En lista de argumentos variables pueden existir de 0 a N argumentos Si hay cero argumentos el valor será null
  • Salida con Formato Para escribir una salida formateada usaremos el método format Podemos indicar que el lugar que debe ocupar una variable poniendo el símbolo % Sintaxis:     %[argument_index$][flags][width][.precision]conversion Argument_index .- Sirve para reordenar los argumentos Flags .- Dependen de cada conversion Width .- Indica el numero minimo de caracteres a escribir Precision .- Restringe el numero de caracteres. Depende de la conversion No valida para fechas Conversion .- b .- booleans o Booleans d .- Entero decimal c .- Caracteres s .- null si el argumento es nulo, .formatTo si el argumento implementa Formattable, .toString() Fecha: [t|T]formato (similar a GNU date y POSIX strftime) %n .- Separador de lineas especifico de la plataforma %% .- Es el '%' escapado Si hay menos argumentos que lo necesario, o si uno de ello es invalido, se genera una RuntimeException; al contrario que C, que ignora los errores.
  • La Clase String Dentro de un objeto de la clases String o StringBuffer , Java crea un array de caracteres de una forma similar a como lo hace el lenguaje C++. A este array se accede a través de las funciones miembro de la clase. Los strings u objetos de la clase String se pueden crear explícitamente o implícitamente. Para crear un string implícitamente basta poner una cadena de caracteres entre comillas dobles. Por ejemplo, cuando se escribe System.out.println( "El primer programa” ) ; Java crea un objeto de la clase String automáticamente. Para crear un string explícitamente escribimos String str = new String( "El primer programa“ ) ; También se puede escribir, alternativamente String str = "El primer programa“ ;
  • Para crear un string nulo se puede hacer de estas dos formas String str = “ “ ; String str = new String( ) ; Un string nulo es aquél que no contiene caracteres, pero es un objeto de la clase String . Sin embargo, String str ; está declarando un objeto str de la clase String , pero aún no se ha creado ningún objeto de esta clase.
  • String. Funciones miembro Una vez creado un objeto de la clase String podemos obtener información relevante acerca del objeto a través de las funciones miembro. Para obtener la longitud, número de caracteres que guarda un string se llama a la función miembro length . String str="El primer programa"; int longitud=str.length(); Podemos conocer si un string comienza con un determinado prefijo, llamando al método startsWith , que devuelve true o false , según que el string comience o no por dicho prefijo String str="El primer programa"; boolean resultado=str.startsWith("El"); En este ejemplo la variable resultado tomará el valor true . De modo similar, podemos saber si un string finaliza con un conjunto dado de caracteres, mediante la función miembro endsWith . String str="El primer programa"; boolean resultado=str.endsWith("programa");
  • Si se quiere obtener la posición de la primera ocurrencia de la letra p, se usa la función indexOf . String str="El primer programa"; int pos=str.indexOf('p'); Para obtener las sucesivas posiciones de la letra p, se llama a otra versión de la misma función pos=str.indexOf('p', pos+1); El segundo argumento le dice a la función indexOf que empiece a buscar la primera ocurrencia de la letra p a partir de la posición pos+1 . Otra versión de indexOf busca la primera ocurrencia de un substring dentro del string. String str="El primer programa"; int pos=str.indexOf("pro"); Vemos que una clase puede definir varias funciones miembro con el mismo nombre pero que tienen distinto número de parámetros o de distinto tipo.
  • Comparación de strings La comparación de strings nos da la oportunidad de distinguir entre el operador lógico == y la función miembro equals de la clase String . En el siguiente código Esta porción de código devolverá que str1 y str2 son distintos objetos pero con el mismo contenido. str1 y str2 ocupan posiciones distintas en memoria pero guardan los mismos datos. Cambiemos la segunda sentencia y escribamos String str1="El lenguaje Java"; String str2=str1; System.out.println("Son el mismo objeto "+(str1==str2); Los objetos str1 y str2 guardan la misma referencia al objeto de la clase String creado. La expresión (str1==str2 ) devolverá true .
  • Asñi pues, el método equals compara un string con un objeto cualquiera que puede ser otro string,  y devuelve true cuando dos strings son iguales o false si son distintos. String str="El lenguaje Java"; boolean resultado=str.equals("El lenguaje Java"); La variable resultado tomará el valor true. La función miembro comapareTo devuelve un entero menor que cero si el objeto string es menor (en orden alfabético) que el string dado, cero si son iguales, y mayor que cero si el objeto string es mayor que el string dado. String str="Tomás"; int resultado=str.compareTo("Alberto"); La variable entera resultado tomará un valor mayor que cero, ya que Tomás está después de Alberto en orden alfabético. String str="Alberto"; int resultado=str.compareTo("Tomás"); La variable entera resultado tomará un valor menor que cero, ya que Alberto está antes que Tomás en orden alfabético.
  • Extraer un substring de un string En muchas ocasiones es necesario extraer una porción o substring de un string dado. Para este propósito hay una función miembro de la clase String denominada substring . Para extraer un substring desde una posición determinada hasta el final del string escribimos String str="El lenguaje Java"; String subStr=str.substring(12); Se obtendrá el substring "Java". Una segunda versión de la función miembro substring , nos permite extraer un substring especificando la posición de comienzo y la el final. String str="El lenguaje Java"; String subStr=str.substring(3, 11); Se obtendrá el substring "lenguaje". Recuérdese, que las posiciones se empiezan a contar desde cero.
  • String y Números Convertir un número a string Para convertir un número en string se emplea la función miembro estática valueOf (más adelante explicaremos este tipo de funciones). int valor=10; String str=String.valueOf(valor); La clase String proporciona versiones de valueOf para convertir los datos primitivos: int , long , float , double . Esta función se emplea mucho cuando programamos applets, por ejemplo, cuando queremos mostrar el resultado de un cálculo en el área de trabajo de la ventana o en un control de edición.
  • Convertir un string en número Cuando introducimos caracteres en un control de edición a veces es inevitable que aparezcan espacios ya sea al comienzo o al final. Para eliminar estos espacios tenemos la función miembro trim String str=" 12 "; String str1=str.trim(); Para convertir un string en número entero, primero quitamos los espacios en blanco al principio y al final y luego, llamamos a la función miembro estática parseInt de la clase Integer (clase envolvente que describe los números enteros) String str=" 12 "; int numero=Integer.parseInt(str.trim()); Para convertir un string en número decimal ( double ) se requieren dos pasos: convertir el string en un objeto de la clase envolvente Double , mediante la función miembro estática valueOf , y a continuación convertir el objeto de la clase Double en un tipo primitivo double mediante la función doubleValue String str="12.35 "; double numero=Double.valueOf(str).doubleValue(); Se puede hacer el mismo procedimiento para convertir un string a número entero String str="12"; int numero=Integer.valueOf(str).intValue();
  • La clase StringBuffer Es posible, con el operador +, concatenar cadenas de caracteres es decir, objetos de la clase String . Ahora bien, los objetos de la clase String son constantes lo cual significa que por defecto, solamente se pueden crear y leer pero no se pueden modificar. Imaginemos una función miembro a la cual se le pasa un array de cadenas de caracteres. Cada vez que se añade una nueva palabra, se reserva una nueva porción de memoria y se desecha la vieja porción de memoria que es más pequeña (una palabra menos) para que sea liberada por el recolector de basura (grabage collector). Si el bucle se realiza 1000 veces, habrá 1000 porciones de memoria que el recolector de basura ha de identificar y liberar.
  • Para evitar este trabajo extra al recolector de basura, se puede emplear la clase StringBuffer que nos permite crear objetos dinámicos, que pueden modificarse. La función append incrementa la memoria reservada para el objeto mensaje con una palabra más sin crear nueva memoria, cada vez que se ejecuta el bucle. La función toString , que veremos más adelante, convierte un objeto en una cadena de caracteres.
  • La clase StringTokenizer Esta clase, perteneciente al paquete java.util , nos ayuda a dividir un string en substrings o tokens, en base a otro string (normalmente un carácter) separador entre ellos denominado delimitador. De forma predeterminada los delimitadores son : el espacio en blanco, el tabulador horizontal ( ) , el carácter nueva línea ( <br /> ) , el retorno de carro( <br /> ) y el avance de pagina de (f) . La clase StringTokenizer proporciona uno de los primeros pasos para realizar un análisis gramatical de una cadena de entrada, extrayendo los símbolos que se encuentren en esa cadena. Si se tiene una cadena de entrada cuyo formato es regular y se desea extraer la información que está codificada en ella, StringTokenizer es el punto de partida. La clase StringTokenizer nos ayuda a dividir un string en substrings o tokens, en base a otro string (normalmente un carácter) separador entre ellos denominado delimitador. Supongamos un string consistente en el nombre, y los dos apellidos de una persona separados por espacios en blanco. La clase StringTokenizer nos ayuda a romper dicho string en tres substrings basado en que el carácter delimitador es un espacio en blanco
  • Constructores StringTokenizer (String str)  StringTokenizer (String str, String delim)  StringTokenizer (String str, String delim, boolean returnDelims) Creamos un objeto de la clase StringTokenizer llamando a uno de los tres constructores que tiene la clase. Al primer constructor, se le pasa el string nombre que va a ser dividido teniendo en cuenta que el espacio en blanco es el delimitador por defecto. Para utilizar esta clase, se necesita un String de entrada y un String de delimitación. Los delimitadores marcan la separación entre los símbolos que se encuentran en la cadena de entrada. Se considera que todos los caracteres de la cadena son delimitadores válidos; por ejemplo, para el delimitador puede ser una coma, un punto y coma o dos puntos. El conjunto de delimitadores por defecto son los caracteres de espacio habituales: espacio, tabulador, línea nueva y retorno de carro. String nombre=“Rolando Steep Quezada Martínez&quot;; StringTokenizer tokens=new StringTokenizer(nombre);
  • Obtención de los tokens int countTokens ( ) boolean hasMoreElements ( ) boolean hasMoreTokens (  ) Object nextElement ( ) String nextToken ( ) String nextToken (String delim) La clase StringTokenizer implementa el interface Enumeration por tanto define las funciones nextElement y hasMoreElements . public class StringTokenizer implements Enumeration { //... public boolean hasMoreElements () { //... } public Object nextElement () { //... } }
  • Una vez que se ha creado un objeto StringTokenizer, se utiliza el método nextToken() para ir extrayendo los símbolos consecutivamente. El método hasMoreTokens() devuelve true cuando todavía quedan símbolos por extraer. Para el programador es más cómodo usar las funciones miembro equivalentes nextToken y hasMoreTokens . Para extraer los apellidos y el nombre, escribiremos
  • Práctica 9: Uso de Scanner, String, StringBuffer y StringTokenizer Objetivo Implementar algoritmos que traten de forma eficiente las cadenas de caracteres utilizando las clases del JDK de Java. Ejercicios Escribir un método que tome como entrada un string que representa un número y devuelva el mismo numero divido por puntos cada tres dígitos. Esto es, para la entrada “12345” la salida sería “12.345” Utilizando los métodos miembro de String, cree una clase Util e implemente el método estático subCadena, que reciba tres parámetros, la cadena origen, índice inicial e índice final; y retorne una nueva cadena contenida en dichos índices. Escriba una aplicación que reciba como argumento una serie de cadenas y envié a la salida sólo las cadenas que comiencen con la letra “b”. Los resultados deberán estar ordenados alfabéticamente. Escriba una aplicación que reciba como argumento una serie de cadenas e imprima en consola sólo aquellas que terminan con “DO”. Escriba una aplicación que reciba un texto como argumento y determine el número de ocurrencias de cada letra del alfabeto en el texto. Escriba dentro de la clase Util del ejercicios 2, un método (insertarFecha) que reciba un StringBuffer y se inserte la fecha actual al inicio del mismo. Escriba dentro de la clase Util un método que pueda multiplicar 2 o más enteros utilizando argumentos variables. Escriba dentro de la clase Util que reciba como parámetro un fecha y retorna una cadena con el formato de fecha corta: YY-MM-DD Escriba una aplicación que permita leer por consola (utilizando la clase Scanner) los apellidos y nombres de los alumnos del curso Professional Java Developer y ordenarlos alfabéticamente por apellidos y luego por nombres (formato: Apellidos, Nombres), los nombres deberan ser almacenados en un arreglo de String. Tomando como referencia el ejercicio anterior, listar en consola sólo los apellidos de los alumnos. (utilice StringTokenizer).

Implementación de Aplicaciones Basadas en Texto Presentation Transcript

  • 1. Implementación de Aplicaciones Basadas en Texto Ing. Rolando Steep Quezada Martínez [email_address] Programación Básica en Java y Programación Orientada a Objetos
  • 2. Entrada/Salida estándar
    • Stream de salida estándar: System.out
      • Objeto PrintStream ( es un tipo de OutputStream)
      • Métodos de escritura print(valor) y println(valor) para los siguientes tipos:
    • Stream de entrada estándar: System.in
      • Objeto InputStream
    • Salida de error “estándar”: System.err
      • Objeto PrintStream
      • Mostrar mensajes de error o cualquier otra información que requiera la atención inmediata del usuario
    String double long char[] boolean Object float int char
  • 3. Lectura de datos por Teclado bytes  InputStream InputStreamReader int read() read(char[]) BufferedReader readLine() read() read(byte[])
  • 4. Lectura de datos con Scanner
  • 5. Varargs
  • 6. Salida con Formato
    • La clase Formatter nos permite crear plantillas para la salida de nuestros datos.
    • También podemos usarlo System.out.format
    • Para dar el formato usaremos el metodo format :
    • public Formatter format(String format, Object... args);
    • public Formatter format(Locale l, String format, Object... args);
  • 7. La Clase String
    • Clase especializada en el manejo de arreglos de caracteres.
    • Su creación no está supeditada al operador new, puede ser implícita.
    • publica String () //constructor de un obj de valor “”
    • public String (String value) //constructor de obj copia de value
    • El valor de una instancia de String es inmutable.
  • 8.  
  • 9. String. Funciones miembro
    • length .- Permite obtener la longitud de la cadena.
    • startsWith .- true si la cadena empieza con el parámetro indicado.
    • endsWith .- true si la cadena termina con el parámetro indicado.
    • indexOf .- retorna la posición de la primera aparición del valor buscado (carácter o subcadena). Se puede especificar un índice inicial para la búsqueda.
  • 10.  
  • 11. Comparación de strings
    • Al ser una clase el valor de un String no puede compararse con el operador ==.
    • Ofrece dos métodos para comparar el su valor:
      • equals .- Método heredado de Object que es sobreescrito para lograr la comparación de dos arreglos de caractéres.
      • equalsIgnoreCase .- la comparación no diferencia mayúsculas o minúsculas.
      • compareTo .- retorna un entero < 0 si el parámetro es mayor con respecto al alfabeto, 0 si son iguales y > 0 si es menor.
      • compareToIgnoreCase .- la comparación no diferencia mayúsculas o minúsculas.
    • Si se aplica la comparación con ==, se estaría comparando la dirección de memoria y no su contenido.
  • 12.  
  • 13. Extraer un substring de un string
    • Define un método sobrecargado para la extracción de un subcadena de su valor.
    • subString .- retorna la cadena a partir de una posición inicial. Puede especificarse una posición final.
  • 14. String y Números
    • Número -> String
      • valueOf .- Método polimórfico por sobrecarga que transforma un número a su equivalente en cadena.
    • String -> Número
    • Las clases envolventes de tipos primitivos proveen dos formas de transformar una cadena a un tipo numérico específico.
      • parseXXX
      • valueOf( str ).XXXvalue
      • donde XXX es el tipo deseado
  • 15.  
  • 16. La clase StringBuffer
    • Gestiona arreglos de caracteres al igual que String, aunque la mayor diferencia es que su valor es mutable.
    • Para cambiar el contenido de un StringBuffer, se pueden utilizar dos métodos: append() e insert() .
    • Ejemplo:
    • su equivalente con StringBuffer:
  • 17.  
  • 18. La clase StringTokenizer
    • Separa elementos de una cadena dado un carácter de separación, que por default es el espacio.
  • 19. Constructores
      • StringTokenizer(String); //Separa una cadena cuando encuentra los delimitadores por /default que son espacio, tabulador, retorno de carro.
      • StringTokenizer(String, String); //separa la primer cadena con el delimitador indicado //por la segunda cadena.
      • String Tokenizer(String,String,boolean); //Permite incorporar a los tokens de la cadena //los elementos delimitadores según la condición boleana.
  • 20. Obtención de los tokens
      • countTokens() //Determina el número de tokens restantes en el String Tokenizer (ST).
      • hasMoreTokens() //Determina cuando el St tiene más elementos.
      • nextToken() //Regresa el siguiente token del ST.
  • 21.  
  • 22. Resumen
    • Java brinda clases para el manejo de rutinas comunes en una aplicación.
    • La clase Scanner simplifica la lectura de datos.
    • En Java se pueden escribir métodos de argumento variable si utilizar sobrecarga.
    • Java permite la salida con formato similar a c.
    • El valor de la cadena de una clase String es inmutable.
    • StringBuffer no crea nuevas referencias de memoria al concatenar o insertar un valor a la cadena que contiene.
    • StringTokenizer permite recuperar los tokens de un texto especificando un delimitador.
  • 23. Práctica 9
    • Objetivos:
      • Utilizar las clases del JDK de Java para realizar tareas de entrada/salida estándar.
      • Adquirir habilidad en el tratamiento de cadenas de caracteres
  • 24.