4th Ed Chapter 9 - 1 - PowerPoint PPT Presentation

About This Presentation
Title:

4th Ed Chapter 9 - 1

Description:

Escribir programas que procesen cadenas usando objetos String, ... Devuelve verdadero si la cadena termina con el prefijo dado str1.endsWith( str2 ) ... – PowerPoint PPT presentation

Number of Views:92
Avg rating:3.0/5.0
Slides: 50
Provided by: thomasw156
Category:
Tags: 4th | chapter | prefijo

less

Transcript and Presenter's Notes

Title: 4th Ed Chapter 9 - 1


1
Capitulo 9
  • Caracteres y Cadenas (Strings)

2
Objetivos
  • Declarar y usar del tipo char.
  • Escribir programas que procesen cadenas usando
    objetos String, StringBuilder y StringBuffer.
  • Diferenciar las 3 clases de string y usar la
    clase correcta de acuerdo a la tarea.
  • Especificar expresiones regulares para buscar un
    patrón en una cadena.
  • Usar las clases Pattern y Matcher.
  • Comparar objetos String correctamente.

3
Caracteres
  • En Java, los caracteres simples son representados
    usando el tipo de dato char.
  • Los caracteres constantes se escriben como
    símbolos encerrados con comillas simples . Ej
    a
  • Los caracteres son almacenados en la mem de la
    computadora usando algún tipo de codificación.
  • ASCII, (American Standard Code for Information
    Interchange), es uno de códigos ampliamente
    usados. Total 128 caracteres (7bits) , permite
    representar los símbolos del lenguaje inglés.
  • Java usa Unicode, que incluye ASCII, permite
    representar más caracteres.Total de símbolos
    34148, ocupa 2 bytes

4
Código ASCII
5
Código Unicode
  • El Unicode Worldwide Character Standard
    (Unicode) permite el intercambio, procesamiento y
    visualización de textos escritos en diversos
    lenguajes.
  • Java usa el estándar Unicode para representar
    caracteres.
  • Los char se declaran igual que otros tipos
    primitivos

6
Procesando Caracteres
7
Strings (cadenas)
  • Una cadena es una secuencia de caracteres que se
    trata como un valor simple
  • Se usan Instancias de la clase String para
    representar cadenas en Java.
  • Ya vimos los métodos substr obtener una
    subcadena

  • length tamaño del String

  • indexOf índice de un caracter
  • Podemos acceder a caracteres individuales de una
    cadena llamando al método charAt.

8
Accediendo a Elemento Individuales
  • El método charAt permite acceder a un carácter
    dentro de un String.

9
Ej Contando vocales
10
Ej Contando palabras Java
Continua leyendo palabras y cuenta cuántas veces
se ingresa java ignorando mayúsculas y minúsculas.
11
Operadores útiles de String
12
Patrones Ej de patrón
  • Suponga que los estudiantes se codifican con tres
    dígitos
  • El 1er dígito representa el área (ej 5 indica
    computación)
  • El 2do indica si es del estado (1), de otro
    estado (2), extranjero (3)
  • El 3ro dígito indica los edificios dentro del
    campus
  • Los edificios se numeran del 1-7.
  • Los estudiantes que viven fuera del campus se
    representan con 8.

El patrón de 3 dígitos para representar a los
estudiantes de computación que viven en el campus
es
51231-7
13
Expresiones Regulares patrones
  • Se usan para buscar y reeplazar texto
  • Permiten expresar un conjunto de palabras (o
    secuencias de símbolos) en forma reducida
  • Se usan símbolos especiales para formular las
    expresiones regulares.
  • Simbolo Significado
  • elección
  • secuencia de 0 o más ocurrencias
  • secuencia de 1 o más ocurrencias
  • negación
  • - rango
  • () y rango de elección de caracteres múltiples

14
Ej de Expresiones Regulares
15
Notacion de repeticion de patrones
  • Tambien se puede designar una secuencia de
    longitud fija.
  • Ej para designar cuatro dígitos 0-94
  • donde el numero contenido en es la cantidad de
    repeticiones.
  • Se puede especificar un rango
  • .... n repetir el patrón exactamente n
    veces
  • .... n, al
    menos
  • .... n,m al menos
    n pero no más de m veces

16
Método Match
  • El método de la clase String es muy similar al
    método equals
  • ej dado un string str
  • str.equals(Hola) y str.match(Hola)
  • devuelven ambos true si str es el string Hola
  • pero el argumento de match puede ser un patrón lo
    cual dá más flexibilidad.
  • matches(String regex)
    devuelve verdadero si este string contiene la
    expresión regular dada, falso caso contrario

17
Pattern Matches identificadores válidos
gt 0 o más veces
  • import javax.swing.
  • class MatchIdentificadoresJava
  • private static final String Parar PARAR
  • private static final String VALID Identif
    Valido
  • private static final String INVALID
    Identif Invalido
  • private static final String PATRON_VALIDO
    a-zA-Za-zA-Z0-9_
  • public static void main (String arg)
  • String str, resp
  • while (true)
  • str JOptionPane.showInputDialog(null
    , Identificador )
  • if (str.equals(PARAR) ) break
  • if (str.matches(PATRON_VALIDO))
  • resp VALID
  • else resp INVALID
  • JOptionPane.showMessageDialog(null, str
    \n resp)

18
El método replaceAll
  • El método replaceAll reemplaza todas las
    ocurrencias de una subcadena que coincide con una
    expresión regular dada .

Reemplaza todas las vocales minúsculas con el
símbolo _at_
19
Ej replaceAll
  • Cambiar todas las ocurrencias de OOP por Prog.
    orientada a objetos
  • str.replaceAll (OOP, Prog. orientada a
    objetos)
  • Reemplazar los nros de seguro social por
    xxx-xx-xxxx
  • str.replaceAll( 0-93 0-92 0-94,
    xxx-xx-xxxx)
  • Reemp. todas las ocurrencia de una secuencias que
    tiene 2 o más letras O por OO
  • str.replaceAll(O2,, OO)

20
  • Si se ejecuta str.replaceAll (ante, antes)
  • reemplazara palabras como
  • antepasado por antespasado
  • para especificar que sólo modifique cuando
    coincide con la palabra entera (no parte de ella)
    \b
  • str.replaceAll(\\bantes\\b, antes)
  • el símbolo \ en un string representa un caracter
    de control tal como \n \t \r
  • para que interprete \bantes\b como un string se
    usa \ adicionales \\bantes\\b

21
Usos del caracter \ de escape
  • El caracter de escape se emplea taa para otros
    símbolos usados en los patrones. Ej
  • Si deseamos buscar el signo en un texto usamos
    \ y para expresarlo como un string \\
  • Ej Reemplazar todas las ocurrencias de C y C
    con java (no necesariamente toda la palabra)
  • str.replaceAll ((CC\\\\), Java)

22
Signos usados con frecuencia en patrones
23
Las clases Pattern y Matcher
  • Los métodos matches y replaceAll de la clase
    String son atajos al uso de las clases Pattern y
    Matcher del paquete java.util.regex.
  • Si str y regex son objetos String, entonces
  • str.matches(regex)
  • equivale a
  • Pattern pattern Pattern.compile(regex)
  • Matcher matcher pattern.matcher(str)
  • matcher.matches()

24
El método compile
  • El método compile de la clase Pattern convierte
    una expresión regular al formato interno para
    llevar a cabo una operación de comparación de
    patrones.
  • Esta conversión se lleva a cabo cada vez que se
    ejecuta el método matches de la clase String, por
    eso es más eficiente usar el método compile
    cuando investigamos el mismo patrón varias veces.
  • Ej de programas Ch9MatchJavaIdentifier2 y
    Ch9PMCountJava

25
Compile se ejecuta sólo una vez, queda fuera el
loop
  • public static void main (String args)
  • String str, reply
  • Matcher matcher
  • Pattern pattern
    Pattern.compile(VALID_IDENTIFIER_PATTERN)
  • while (true)
  • str JOptionPane.showInputDialog(null
    , "Identifier")
  • if (str.equals(STOP)) break
  • matcher pattern.matcher(str)
  • if (matcher.matches())
  • reply VALID
  • else .............

26
Cuántas veces está una palabra
  • public static void main (String args)
  • String document int
    javaCount 0
  • Matcher matcher
  • Pattern pattern Pattern.compile("java",

  • Pattern.CASE_INSENSITIVE)
  • document JOptionPane.showInputDialog(null,
    "Sentencia")
  • matcher pattern.matcher(document)
  • while (matcher.find())
  • javaCount
  • JOptionPane.showMessageDialog(null,La
    palabra 'java' ocurrio " javaCount "
    veces")

27
El método find
  • El método find es otro método potente de la clase
    Matcher
  • Busca la próxima ocurrencia de una cadena que
    coincida con el patrón, devuelve verdadero si se
    encuentra el patrón
  • Cuando se encuentra, podemos obtener el lugar de
    la secuencia con los métodos start y end métodos.

28
Posicion comienzo y fin
  • Ej.
  • matcher pattern.matcher(docu)
  • while (matcher.find()) System.out.println(docu.
    substring(matcher.start(),
  • matcher.end()) " encontrado en la
    posic "
  • matcher.start())

29
La clase String es Inmutable
  • En Java un objeto String es inmutable
  • Significa que una vez que se crea un objeto
    string, no puede cambiarse, no se puede cambiar
    un caracter por otro, remover caracteres, etc
  • Los método que usamos hasta ahora no cambian al
    string original, crean un nuevo objeto. Por ej.
    Substring crea un nuevo objeto String a partir de
    otro dado.
  • Incluso cuando hacemos str str1 str2
  • La clase String se define de esta forma por
    razones de eficiencia.

30
Efectos de la Inmutabilidadty
Podemos hacer esto pues los String son inmutables
31
La clase StringBuffer
  • En muchas aplicaciones que procesan cadenas,
    deseamos cambiar el contenido, es decir,
    necesitamos que sea mutable
  • Podemos modificar el contenido de una cadena
    empleando la clase StringBuffer
  • Por ej, para concatenar cadenas, eliminar una
    parte de una cadena, reemplazar caracteres, etc

32
Ej StringBuffer
Cambiar la cadena Java a Diva
33
Ej procesamiento
  • Reeplazar todas las vocales de una sentencia con
    X.

34
Los métodos append e insert
  • Podemos usar el método append para agregar a un
    objeto String o StringBuffer al final de un
    objeto StringBuffer.
  • El método puede tambien tomar un argumento de
    tipo de dato primitivo.
  • Cualquier tipo de dato primitivo es convertido a
    un String antes de que se pasarlo al objeto
    StringBuffer.
  • Tambien podemos agregar una cadena en una
    posición específica usando el método insert.

35
La clase StringBuilder
  • Esta clase es nueva de Java 5.0 (SDK 1.5)
  • Se agregó esta clase en la última versión para
    mejorar la performance de la clase StringBuffer.
  • StringBuffer y StringBuilder soportan los mismos
    métodos, de manera que son intercambiables.
  • Hay casos avanzados donde se debe usar
    StringBuffer, en los ejemplos dados aquí se puede
    intercambiar a StringBuilder.
  • Si no es importante la performance y ya que
    StringBuffer se puede usar en todas las versiones
    de Java usar StringBuffer

36
Problema Concordancia de documentos
  • Escribir una aplicación que de la concordancia
    de palabras dentro de un documento
  • La salida es una lista ordenada alfabéticamente
    de todas las palabras de un documento y el número
    de veces que ocurren
  • El documento es un archivo de texto y la salida
    se graba en otro archivo

37
Plan General
  • Tareas en pseudocodigo

38
Documento de Diseño
39
Relación entre las Clases
clase a implementar
clase de dada
40
Desarrollo
  • Desarrollaremos en 4 pasos
  • Comenzar con el esqueleto del prorama. Definir la
    clase principal y sus datos miembro. Comenzar con
    una clase rudimentaria Ch9WordConcordance.
  • Agregar código para abrir y grabar los resultados
    Extender las clases existentes de acuerdo a las
    necesidades.
  • Completar la implementación de la clase
    Ch9WordConcordance.
  • Finalizar el código removiendo las sentencias
    temporales.

41
Paso 1 Diseño
  • Definir el esqueleto de la clase principal
  • Definir el esqueleto de la clase
    Ch9WordConcordance class, por ahora solo tendra
    un constructor sin argumentos

42
Step 1 Code
Directory Chapter9/Step1 Source Files
Ch9WordConcordanceMain.java Ch9WordConcordance.
java
Program source file is too big to list here. From
now on, we ask you to view the source files using
your Java IDE.
43
Paso 1 Prueba
  • Verificar que el constructor se ejecute
    correctamente
  • y que el control de repetición en el método
    start trabaje como esta planificado

44
Paso 2 Diseño
  • Agregar rutinas para el manejo I/O de archivos
  • La tarea la va a hacer la clase FileManager,
    necesitamos ver como usar correctamente esta
    clase.
  • La clase FileManager tiene dos métodos openFile
    y saveFile.
  • Hay dos implementaciones de saveFile, usar un
    arch por defecto output1.txt o permitir al
    usuario que elija el arch usando un cuadro de
    dialogo.
  • caso 1 FileManager fm new FileManager()
  • String doc ......
  • fm.saveFile (output1.txt,
    doc)
  • caso 2 fm.saveFile (doc)

45
Step 2 Code
Directory Chapter9/Step2 Source Files
Ch9WordConcordanceMain.java Ch9WordConcordance.
java
46
Paso 2 Prueba
  • probar que se abran los archivos y los muestre
    por la terminal, System.out.
  • Verificar la rutina de salida, que se grabe el
    archivo de salida con el nombre indicado editar
    con un editor de texto
  • La salida la crea el método build de
    Ch9WordConcordance,es temporal aún

47
Paso 3 Diseño
  • Completar el método build de la clase
    Ch9WordConcordance
  • Usaremos la 2da clase de ayuda WordList
  • El método clave de esta clase es el método add
    que inserta la palabra dada dentro de la lista de
    palabras

48
Step 3 Code
Directory Chapter9/Step3 Source Files
Ch9WordConcordanceMain.java Ch9WordConcordance.
java
49
Step 3 Probar
  • Correr el programa empleando distintos archivos
    de texto
  • Podemos emplear algún archivo largo
  • Taa archivos creados a propósito con palabras
    repetidas para ver si las cuenta en forma
    correcta
  • Usar un archivo vacío.
Write a Comment
User Comments (0)
About PowerShow.com