Verificación de tipos de datos

Limpieza de datos en Java

Dennis Lee

Software Engineer

¿Por qué comprobar los tipos de datos?

  • Necesidad de parsear texto de fuentes externas
  • Tipos de datos inválidos causan errores en ejecución
  • Validar bien evita fallos

 

String priceText = "$30.61";
double price = Double.parseDouble(priceText);  // Falla: $ no es válido en un número
Exception in thread "main" java.lang.NumberFormatException
Limpieza de datos en Java

Validar texto numérico

// Utilidad para validar números
import org.apache.commons.lang3.math.NumberUtils; 
String reviewCountText = "165";
System.out.println(NumberUtils.isParsable(reviewCountText));
true
String priceText = "$30.61"; // Número inválido
System.out.println(NumberUtils.isParsable(priceText)); // false: tiene símbolo $
false
Limpieza de datos en Java

Parsear texto numérico

private static String validateNumeric(String value) {
    if (NumberUtils.isParsable(value)) return value;  // Devuelve si es número válido
    throw new IllegalArgumentException("Invalid: " + value);  // Si no, lanza error
}

int reviews = Integer.parseInt(validateNumeric("165"));  // Validar y luego parsear

// Quitar $ primero double price = Double.parseDouble(validateNumeric("$30.61".replace("$", ""))); System.out.println("reviews: " + reviews + "\nprice in $: " + price);
reviews: 165
price in $: 30.61
Limpieza de datos en Java

Validar formatos de fecha

import java.time.format.DateTimeFormatter; // Para formatear patrones de fecha
private static LocalDate parseDate(String dateStr) {
    DateTimeFormatter format = DateTimeFormatter.ofPattern("M/d/yy");

return LocalDate.parse(dateStr, format); // Convertir string a LocalDate }
LocalDate date = parseDate("1/10/23"); // "1/10/23" se convierte en 2023-01-10 System.out.println("Date: " + date);
Date: 2023-01-10
Limpieza de datos en Java

Combinar validación numérica y de fecha

private static double parsePrice(String price) {
    return Double.parseDouble(validateNumeric(price.replace("$", "")); // Quitar $
}


// Convertir campos CSV a BookSales public static BookSales parseSalesData(String[] fields) { String title = fields[0]; LocalDate publishDate = parseDate(fields[1]); // Parseo de fecha personalizado int reviews = Integer.parseInt(validateNumeric(fields[2])); double rating = Double.parseDouble(validateNumeric(fields[3])); double price = parsePrice(fields[4]); // Manejar formato de moneda return new BookSales(title, publishDate, reviews, rating, price); }
Limpieza de datos en Java

Lectura segura de archivos CSV

List<BookSales> sales = new ArrayList<>(); // Almacena objetos BookSales


try (BufferedReader reader = new BufferedReader(new FileReader("book_sales.csv"))) {
String line = reader.readLine(); // Saltar la cabecera
while ((line = reader.readLine()) != null) { // Leer hasta el final String[] fields = line.split(","); // Dividir la línea CSV en array sales.add(parseSalesData(fields)); // Convertir a objeto BookSales } }
sales.forEach(System.out::println); // Imprimir cada venta
BookSales[title=Python Crash Course, publishDate=2023-01-10, 
reviewCount=165, rating=4.8, price=30.61]
Limpieza de datos en Java

Resumen: verificación de tipos de datos

  • Valida el texto antes de parsear para evitar errores en tiempo de ejecución
  • Importaciones clave
    • org.apache.commons.lang3.math.NumberUtils
    • java.time.format.DateTimeFormatter
  • Usa NumberUtils.isParsable() para comprobar números
  • Maneja varios formatos de fecha con DateTimeFormatter
  • Capturar problemas de tipo garantiza la integridad de los datos
Limpieza de datos en Java

¡Vamos a practicar!

Limpieza de datos en Java

Preparing Video For Download...