Download objeto

Document related concepts
no text concepts found
Transcript
Manipulación de Cadenas
Introducción a los conceptos de clase e objetos
Nadjet Bouayad-Agha
Programación
2007-2008
Manipulación de Cadenas
• Acceder a los carácteres de una cadena
• Sustituir carácteres o (sub)cadenas por otro(a)s
• Utilizar expresiones regulares y hacer “pattern
matching”
• Más linguistico: acceder a las palabras de una frase
Manipulación de Cadenas
• Acceder a los carácteres de una cadena
• Sustituir carácteres o (sub)cadenas por otro(a)s
• Utilizar expresiones regulares y hacer “pattern
matching”
= clase String
• Más linguistico: acceder a las palabras de una frase
= clase StringTokenizer
Agenda de Hoy
• Métodos de la clase String
• Expresiones regulares
• Métodos de la clase String para hacer “pattern
matching”
• Clase StringTokenizer
• Un poco de teoría sobre clases y objetos
Algunos métodos de la clase String
String toUpperCase()
String toLowerCase()
int indexOf(int ch)
String substring(int beginIndex)
String replace(char oldChar,char newChar)
boolean endsWith(String suffix)
String[ ] split(String regex)
boolean matches(String regex)
String replaceFirst(String regex,String replacement)
String replaceAll(String regex,String replacement)
5
Expresiones regulares
• Patrones:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html#sum
6
Expresiones regulares
• Pattern matching en la clase String:
– boolean matches(String regex)
– El método comprueba que la cadena concuerda totalemente
con la expresión regular.
– Un ejemplo:
String cadena = “Hola”;
if (cadena.matches(“Hola”))
System.out.println(“MATCH1”);
if (cadena.matches(“Ho”))
System.out.println(“MATCH2”);
if (cadena.matches(“Ho.*”))
System.out.println(“MATCH3”);
7
Expresiones regulares
• Ejercicio - escribir expresiones regulares para
representar los siguientes conceptos:
–
–
–
–
Código secreto de una tarjeta de crédito.
Una palabra que empieza con mayúscula.
Un número.
Una fecha de nacimiento.
8
Expresiones regulares
• Como recuperar la subcadena concordante:
– String replaceFirst(String regex,String replacement)
– String replaceAll(String regex,String replacement)
– Ponemos la(s) expresión(es) que queremos recuperar dentro
de regex entre parentésis.
– En replacement, podemos recuperar estas expresiones
poniendo referencias atrás.
9
Expresiones regulares
• Como recuperar la subcadena concordante:
– Un ejemplo: cambiar una fecha del formato MM/DD/AA al
formato DD/MM/AA.
String fecha = “11/09/74”;
String regex = “([0-9][0-9])/([0-9][0-9])/([0-9][0-9])”;
if (fecha.matches(regex)) {
fecha = fecha.replaceFirst(regex,”$2/$1/$3”);
}
– $1 corresponde a la primera pareja de parentésis en regex,
$2 a la segunda, $3 a la tercera, etc.
10
La clase StringTokenizer
• Dentro del paquete (package) java.util. Para importar
este paquete scribir antes de la declaración de la
clase:
– import java.util.*;
– import java.util.StringTokenizer; // para importar solo la clase
que hay dentro de este paquete
• Permite dividir una cadena en tokens
• El delimitador por defecto es " \t\n\r\f"
• El objeto de tipo StringTokenizer permite recorrer una
vez la cadena por tokens.
11
La clase StringTokenizer
• Ejemplo:
import java.util.*;
public class MyClass {
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer("this is a test");
while (st.hasMoreTokens())
System.out.println(st.nextToken());
}
}
• Para dividir en tokens, con otros tipos de carácteres que los
carácteres por defecto, podemos utilizar el constructor de
objetos StringTokenizer con dos argumentos. Por ejemplo:
StringTokenizer st = new StringTokenizer("Hola, qué tal, bien?",”,”);
12
Variables de tipo básico vs de objeto
• Variable de tipo básico:
int i=10;
• Variable de objeto:
StringTokenizer st = new StringTokenizer(“hola, qué tal”);
i 10
st
(datos)
(métodos)
13
Variables de tipo básico vs de objeto
• La variable st es una referencia a un objeto de tipo
StringTokenizer, es decir un objeto de la clase
StringTokenizer.
• La variable i contiene el valor entero 10.
• La variable st no contiene los tokens, sino la dirección en
memoria del objeto responsable de la devolución de los tokens.
• Una clase como StringTokenizer es como un molde que
define las propiedades y el comportamiento (métodos) que
constituyen cada objeto de esta clase.
• Un objeto es una instancia de esta clase.
14
Manipulación de variables de objeto
• La clase StringTokenizer tiene dos constructores:
– StringTokenizer st = new StringTokenizer(“hola, qué tal?);
– StringTokenizer st = new StringTokenizer(“hola, qué tal?”,”,”);.
• Estos constructores construyen objetos de tipo (de la clase)
String.
• Para crear los objetos hemos utilizado con la instrucción new el
nombre de la clase como un método.
• Toda clase tiene al menos un constructor.
15
Manipulación de variables de objeto
• Para inicializar una variable de objeto, utilizamos la
referencia nula:
StringTokenizer st = null;
El valor null es la inicialización por defecto:
String st;
• Si llamamos a métodos con un objeto cuyo valor es
null, entonces se produce un
NullPointerException.
16
Manipulación de variables de objeto
• Diferencia entre variables de objeto y variables de tipo básico:
StringTokenizer st1 = new StringTokenizer(“hola qué tal?)”;
StringTokenizer st2 = st1;
int i = 10;
Hemos
copiado el
int j = i;
contenido
10
j
i 10
de i dentro de
j = el valor
Hemos
copiado el
contenido
de st1 dentro
de st2 = la
referencia
(datos)
st1
(métodos)
st2
17
Manipulación de variables de objeto
• st1 y st1 de la transparencia previa refieren al
mismo objeto, tienen la misma referencia. En modo
depuración en Netbeans, podemos verlo en la ventana
de “Variables Locales”, así:
• Si ahora imprimimos st1.nextToken() y después
st2.nextToken(), se imprimirá primero hola y
después en la siguiente línea qué
18
Manipulación de variables de objeto
• Podemos comprobar la igualdad entre las dos variables de
objeto:
boolean igual = (st1 == st2);
El boolean contiene “true”, pues las dos variables contienen la misma referencia.
• Si por otro lado tenemos:
StringTokenizer st1 = new StringTokenizer(“hola qué tal?);
StringTokenizer st2 = new StringTokenizer(“hola qué tal?);
boolean igual = (st1 == st2);
El boolean contiene “false”, pues las variables contienen referencias distintas.
• Un constructor en efecto devuelve la referencia (o dirección en
memoria) del objeto.
19
Manipulación de variables de objeto
• Accedemos a los datos de un objeto mediante
métodos.
• Llamamos a los métodos de un objeto a partir de su
variable de objeto. Por ejemplo:
– st.nextToken();
– cadena.length();
• Si la variable de objeto no apunta a un objeto, al
llamar al método de este objeto, se produce un
nullPointerException.
20
La clase String
• String también es una clase. Pertenece al paquete
java.lang, que es accesible desde cualquier programa (no
hace falta importarlo).
• String es una clase un poco especial.
– Los objetos se pueden crear de dos formas
equivalentes:
String cadena = “hola”;
String cadena = new String(“hola”);
– Aparte de tener métodos, una variable de tipo String
se comporta más bien como una variable de tipo
básico:
String cadena1 = “hola”;
String cadena2 = cadena1;
Los literales String siempre se copian. cadena1 y
cadena2 no apuntan a la misma cadena.
21