Publicado el 4 de Febrero del 2017
1.056 visualizaciones desde el 4 de Febrero del 2017
191,9 KB
21 paginas
Creado hace 16a (14/04/2008)
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)
• Para crear los objetos hemos utilizado con la instrucción new el
String.
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:
• Si llamamos a métodos con un objeto cuyo valor es
String st;
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;
int j = i;
st1
st2
Hemos
copiado el
contenido
de st1 dentro
de st2 = la
referencia
i 10
j 10
Hemos
copiado el
contenido
de i dentro de
j = el valor
(datos)
(métodos)
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
– Aparte de tener métodos, una variable de tipo String
equivalentes:
String cadena = “hola”;
String cadena = new String(“hola”);
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
Comentarios de: Manipulación de Cadenas Introducción a los conceptos de clase e objetos (0)
No hay comentarios