Resumen OCP(SCJP): Capítulo 6. Strings, I/O, Formateo y Parseo

por | julio 7, 2013

STRING, STRINGBUILDER, AND STRINGBUFFER(OBJETIVO 3.1)

charAt(): Retorna el caracter localizado en el índice especificado.
concat(): Concatena un String al final de otra (“+” tambien funciona).
equalsIgnoreCase(): Determina la igualdad de 2 Strings, ignorando el caso.
length(): Retorna el número de caracteres en un String.
replace(): Reemlaca las ocurrencias de un caracter por otro caracter.
toLowerCase(): Retorna un String con las caracteres en mayúscula convertidos.
toString(): Retorna el valor de un String.
toUpperCase(): Retorna un String con los caracteres en minuscula convertidos.
trim(): Remueve los espacios en blanco al comienzo o final de un String.

substring(): Retorna una parte del String.

Desafortunadamente, el argumento de finalización no está basado en 0

String x = "0123456789";                // El valor de cada caracter
                                        // es el mismo que el índice
System.out.println(x.substring(5));     // La salida es "56789"
System.out.println(x.substring(5, 8));  // La salida es "567"

FILE E I/O (OBJETIVO 3.2)

Clase java.io     Hereda de Argumentos del Constructor Métodos clave
File Object File, String
String
String, String
createNewFile()
delete()
exists()
isDirectory()
isFile()
list()
mkdir()
renameTo
FileWriter Writer File
String
close()
flush()
write()
BufferedWriter Writer Writer close()
flush()
newLine()
write()
PrintWriter Writer File (como en Java 5)
String (como en Java 5)
OutputStream
Writer
close()
flush()
format(), printf()
print(), println()
write()
FileReader Reader File
String
read()
BufferedReader Reader Reader read()
readLine()

SERIALIZACIÓN (OBJETIVO 3.3)

Cuando se intenta serializar un objeto (Serializable) que contiene (relación HAS-A) una referencia a otro tipo de objeto pueden ocurrir ciertas situaciones:
Si el objeto contenido no implementa la interface Serializable: Se produce la siguiente excepción en tiempo de ejecución NoSerializableException.

El proceso de serialización de Java posee un mecanismo especial para los objetos que son especiales y difíciles de guardar. Se trata de un conjunto de métodos privados que se pueden implementar en la clase en cuestión. Si dichos métodos concuerdan con la signatura exacta, se invocarán durante el proceso de serialización y deserialización del objeto. Las signaturas son las siguientes:

private void writeObject (ObjectOutputStream os) { }
private void readObject (ObjectInputStream is) { }

Proceso de serialización por defecto:

ObjectOutputStream.defaultWriteObject()
ObjectInputStream.defaultReadObject()

Métodos para almacenar y leer datos adicionales:

ObjectOutputStream.writeInt()
ObjectOutputStream.writeFloat()
ObjectInputStream.readInt()
ObjectInputStream.readFloat()

Si una superclase no implementa Serializable, cuando una subclase se deserializa, se invoca el constructor por defecto de la clase padre. si no posee un constructor por defecto, se producirá un error en tiempo de ejecución a la hora de deserializar el objeto.

Las variables static nunca son guardadas como parte del estado del objeto, porque no pertenecen al objeto!

FECHAS, NÚMEROS Y MONEDAS (OBJETIVO 3.4)

Para crear instancias de la clase DateFormat, se deben utilizar los métodos estáticos getInstance() y getDateInstance()

Locale italia = new Locale("it","IT");
DateFormat dfItalia = DateFormat.getDateInstance(DateFormat.FULL, italia);
System.out.println("La fecha en italia: "
   +dfItalia.format(c.getTime()));

NumberFormat nfItalia = NumberFormat.getCurrencyInstance(italia);
System.out.println("El precio en italia es: "
   +nfItalia.format(new BigDecimal("32.75")));
Caso de uso Pasos
Obtener la fecha y hora actual 1.Creamos un Date: Date d = new Date();
2.Obtenemos el valor: String s = d.toString();
Obtener un objeto que nos permita
realizar calculos de fecha y hora
en nuestra localización.
1.Creamos un objeto de la clase Calendar:
Calendar c = Calendar.getInstance();
2.Usamos c.add(…) y c.roll(…) para realizar
manipulaciones de datos.
Obtener un objeto que nos permita
realizar cálculos en una localización
diferente.
1.Creamos un objeto Locale:
Locale loc = new Locale(language);
Locale loc = new Locale(language, country);
2.Creamos un Calendar para ese Locale:
Calendar c = Calendar.getInstance(loc);
3.Usamos c.add(…) y c.roll(…) para realizar
manipulaciones de fechas y horas
Obtener un objeto que nos permita
realizar cálculos de fecha y hora,
y entonces formatear la salida en
diferentes localizaciones con
diferentes estilos de fecha.
1.Creamos un Calendar:
Calendar c = Calendar.getInstance();
2.Creamos un Locale para cada localización:
Locale loc = new Locale(…);
3.Convertimos Calendar a Date:
Date d = c.getTime();
4.Creamos un DateFormat para cada Locale:
DateFormat df = DateFormat.getDateInstance(style, loc);
5.Usamos los métodos de format() para crear fechas formateadas:
String s = df.format(d);
Obtener un objeto que nos permita
formatear numeros y monedas en los
diferentes localizaciones:
1.Creamos un Locale para cada localizacion:
Locale loc = new Locale(…);
2.Creamos un NumberFormat:
NumberFormat nf = NumberFormat.getInstance(loc); o
NumberFormat nf = NumberFormat.getCurrencyInstance(loc);
3.Usamos el método format() para crear una salida formateada:
String s = nf.format(someNumber);
Clase Opciones de Creacion Clave de la Instancia
util.date new Date();
new Date(long millisecondsSince010170);
util.Calendar Calendar.getInstance();
Calendar.getInstance(Locale);
util.Locale Locale.getDefault();
new Locale(String language);
new Locale(String language, String country);
text.DateFormat DateFormat.getInstance();
DateFormat.getDateInstance();
DateFormat.getDateInstance(style);
DateFormat.getDateInstance(stryle, Locale);
text.NumberFormat NumberFormat.getInstance();
NumberFormat.getInstance(Locale);
NumberFormat.getNumberInstance();
NumberFormat.getNumberInstance(Locale)
NumberFormat.getCurrencyInstance();
NumberFormat.getCurrencyInstance(Locale);

PARSEO, TOKENIZING Y FORMATEO (OBJETIVO 3.5)

Los metacaracteres utilizados en el examen son: ‘\d’, ‘\w’, ‘\s’ y ‘.’.
Los cuantificadores utilizados en el examen son: ‘?’, ‘*’ y ‘+’.
Los métodos que son utilizados en el examen son:

  • Pattern: compile()
  • Matcher: matches(), pattern(), find(), start() y group().

Búsqueda Usando Metacaracteres

  • \d Un dígito
  • \s Un caracter espacio
  • \w Un caracter de palabra (letras, dígitos, o “_”)

[abc] Busca solo caracteres a, b o c
[a-f] Busca solo caracteres desde la a hasta la f
[a-fA-F] Busca las primeras 6 letras del alfabeto, en ambos casos

Búsquedas Usando Cuantificadores

  • + Una o mas ocurrencias
  • * Cero o mas ocurrencias
  • ? Cero o una ocurrencia
  • ^ negación
  • . Cualquier caracter

Cuantificadores “Codiciosos”

  • ? es “greedy”, ?? es “reluctant”, para cero o ninguno
  • * es “greedy”, *? es “reluctant”, para cero o ninguno
  • + es “greedy”, +? es reluctant, para uno o varios

El delimitados por defecto del Scanner es el espacio en blanco, el cual el programa usa.

Formateando con printf() y format()

%[arg_index$][flags][width][.precision]conversion char

arg_index: Un entero seguido directamente por un $, indica que argumento debería ser impreso en esta posición.
flags: Mientras hay varios flags disponibles, los mas básicos son los siguientes:
“-“ Justifica a la izquierda este argumento.
“+” Incluye el signo (+ p -) con este argumento.
“0” Rellena este argumento con ceros.
“,” Usa separadores de grupo específicos de una localización (Ejemplo, la coma en 123,456).
“(“ Cierra números negativos entre paréntesis.
width: Este valor indica el número mínimo de caracteres a imprimir.
precision: En el caso de números que son float, la precisión indica el número de dígitos después del punto decimal.
conversion: El tipo de argumentos que vamos a formatear. Tenemos que saber:
b boolean
c char
d integer
f floating point
s string

int i1 = -123;
int i2 = 12345;
System.out.printf(">%1$(7d< \n", i1);
System.out.printf(">%0,7d< \n", i2);
System.out.printf(">%+-7d< \n", i2);
System.out.printf(">%2$b + %1$5d< \n", i1, false);
>  (123)<
>012.345<
>+12345 <
>false +  -123<

En las siguientes imágenes pueden ver un resumen muy completo:

Format en acción

Format en acción

 

Regex en acción

Regex en acción

EOF