a

GeneradorNombres

Clase de utilidades que permite la generaci贸n de nombres femeninos y masculinos, sus respectivos apellidos, y otras funcionalidades.

El acceso a estos m茅todos es de manera est谩tica. Por ejemplo:

String nombre = GeneradorNombres.generarNombre(Sexo.Masculino, Complejidad.SIMPLE);

Nota:

En la prueba visual de la api, existe una prueba de estas funcionalidades en la secci贸n de Generadores.

脥ndice de contenido

Piscinas de Datos

Los listados de nombres y apellidos que sirven de piscina de datos son los siguientes:

M茅todos implementados

Generar nombre dado Sexo y Complejidad

  • Arquetipo: generarNombre(Sexo, Complejidad)
  • Par谩metros: Sexo y Complejidad del nombre
  • Descripci贸n: Permite generar de forma aleatoria un nombre dado su Sexo y Complejidad
  • Ejemplo de uso:

    String nombre = GeneradorNombres.generarNombre(Sexo.FEMENINO,Complejidad.SIMPLE);
    

Generar todos los nombres dado Sexo

  • Arquetipo: generarNombres(Sexo)
  • Par谩metros: Sexo
  • Descripci贸n: Permite generar todos los nombres posibles delSexo pasado.
  • Particularidades: La cantidad de nombres generados es en dependencia del Sexo seleccionado.
  • Ejemplo de uso:

    List<String> listado = GeneradorNombres.generarNombres(Sexo.ALEATORIO);
    

Generar una parte de todos los nombres dados cantidad y Sexo

  • Arquetipo: generarNombres(int, Sexo)
  • Par谩metros: Cantidad de nombres y Sexo
  • Descripci贸n: Permite generar una cantidad de nombres del Sexo pasado.
  • Particularidades: La cantidad m谩xima de nombres generados es en dependencia del Sexo seleccionado.
  • Ejemplo de uso:

    List<String> listado = GeneradorNombres.generarNombres(100,Sexo.ALEATORIO);
    

Generar todos los apellidos

  • Arquetipo: generarApellidos()
  • Descripci贸n: Permite generar todos los apellidos posibles
  • Ejemplo de uso:

    List<String> listado = GeneradorNombres.generarApellidos();
    

Generar una parte de todos los apellidos dado una cantidad

  • Arquetipo: generarApellidos(int)
  • Par谩metros: Cantidad de apellidos
  • Descripci贸n: Permite generar una cantidad de apellidos
  • Particularidades: Tiene como m谩ximo la cantidad de apellidos disponibles.
  • Ejemplo de uso:

    List<String> listado = GeneradorNombres.generarApellidos(383);
    

Generar un apellido dado Complejidad

  • Arquetipo: generarApellido(Complejidad)
  • Par谩metros: Complejidad
  • Descripci贸n: Permite generar un apellido con determinada Complejidad.
  • Ejemplo de uso:

    String apellido = GeneradorNombres.generarApellido(Complejidad.COMPUESTA);
    

Generar un nombre completo dado Sexo, Complejidad del nombre y Complejidad del apellido

  • Arquetipo: generarNombreYApellidos(Sexo, Complejidad, Complejidad)
  • Par谩metros: Sexo, Complejidad del nombre y Complejidad del apellido.
  • Descripci贸n: Permite generar un nombre completo con nombre/s y apellido/s con determinado Sexo, Complejidad del nombre y Complejidad del apellido.
  • Ejemplo de uso:

    String nombreCompleto = GeneradorNombres.generarNombreYApellidos(Sexo.MASCULINO,Complejidad.COMPUESTA, Complejidad.COMPUESTA);
    

Generar listado de nombres completos dados cantidad, Sexo, Complejidad del nombre y Complejidad del apellido

  • Arquetipo: generarListadoNombreYApellidos(int, Sexo, Complejidad, Complejidad)
  • Par谩metros: Cantidad de nombres a generar, Sexo, Complejidad de los nombres y Complejidad de los apellidos.
  • Descripci贸n: Permite generar una cantidad determinada de nombres con apellidos con determinado Sexo, Complejidad del nombre y Complejidad del apellido
  • Ejemplo de uso:

    List<String> listado = GeneradorNombres.generarListadoNombreYApellidos(1000,Sexo.ALEATORIO,Complejidad.Compuesta, Complejidad.ALEATORIA);
    

Generar Informe txt del listado de nombres completos dados cantidad, Sexo, Complejidad del nombre y Complejidad del apellido

  • Arquetipo: generarInformeListadoNombreYApellidos(int, Sexo, Complejidad, Complejidad)
  • Par谩metros: Cantidad de nombres a generar, Sexo, Complejidad de los nombres y Complejidad de los apellidos.
  • Descripci贸n: Permite generar un archivo txt en la carpeta ra铆z que contiene un listado de nombres y apellidos con determinado Sexo, Complejidad de los nombres y Complejidad de los apellidos.
  • Particularidades: Este archivo se crea con el nombre Listado_Nombre_y_Apellidos_Generados.txt. Al crearse, se imprime por consola la ruta del archivo generado.
  • Ejemplo de uso:

    GeneradorNombres.generarInformeListadoNombreYApellidos(100000,Sexo.MASCULINO,Complejidad.SIMPLE,Complejidad.SIMPLE);
    

Enums

Los enums son:

Sexo

Enum que permite modelar el sexo de los nombres a generar.

Los sexos actualmente soportados son:

  • FEMENINO: Permite generar nombres de sexo femenino
  • MASCULINO: Permite generar nombres de sexo masculino
  • ALEATORIO: Permite generar nombres tanto de sexo femenino como masculino

Complejidad

Enum que permite modelar la complejidad de los nombres y apellidos a generar.

Las complejidades actualmente soportadas son:

  • SIMPLE: Permite generar nombres y apellidos simples; es decir, nombres y apellidos con una sola ocurrencia. Por ejemplo: - Nombre Simple -> Juan - Apellido Simple -> Rojas - Nombre y Apellido Simples -> Juan Rojas
  • COMPUESTA: Permite generar nombres y apellidos compuestos; es decir, nombres y apellidos con doble sola ocurrencia. Por ejemplo:
    • Nombre Compuesto -> Juan Alejandro
    • Apellido compuesto -> Rojas Rosales
    • Nombre y Apellido compuestos -> Juan Alejandro Rojas Rosales
  • ALEATORIA: Permite generar nombres y apellidos tanto simples como compuestos; es decir, nombres y apellidos con una o doble ocurrencia.

C贸digo Fuente

public final class GeneradorNombres {
	private GeneradorNombres(){}
	
	public static final int cantNombresFemeninos = 2001;

	public static final int cantNombresMasculinos = 1599;

	public static final int cantNombres = cantNombresFemeninos+cantNombresMasculinos;

	public static final int cantApellidos = 4908;

	
	public static List<String> generarNombres(Sexo sexo) {
		List<String> s = new ArrayList<>();
		switch (sexo) {
		case FEMENINO:
			s.addAll(Arrays.asList(ProveedorNombres.NOMBRES_FEMENINOS));
			break;
		case MASCULINO:
			s.addAll(Arrays.asList(ProveedorNombres.NOMBRES_MASCULINOS));
			break;
		case ALEATORIO:
			s.addAll(Arrays.asList(ProveedorNombres.NOMBRES_FEMENINOS));
			s.addAll(Arrays.asList(ProveedorNombres.NOMBRES_MASCULINOS));
			break;
		default:
			throw new IllegalArgumentException("Parametros erroneos");
		}
		Collections.sort(s);
		
		return s;
	}
	
	
	public static List<String> generarNombres(int cantidad, Sexo sexo){
		List<String> s = generarNombres(sexo);
		Collections.shuffle(s);
		s = s.subList(0, cantidad-1);
		Collections.sort(s);
		return s;
	}
	
	public static List<String> generarApellidos() {
		return new ArrayList<String>(Arrays.asList(ProveedorApellidos.APELLIDOS));
	}
	
	public static List<String> generarApellidos(int cantidad) {
		List<String> s = generarApellidos();
		Collections.shuffle(s);
		s = s.subList(0, cantidad-1);
		Collections.sort(s);
		return s;
	}
	
	public static String generarNombre(Sexo sexo, Complejidad complejidad) {
		List<String> s = new ArrayList<String>();
		String respuesta;
		switch(sexo){
		case FEMENINO:
			s.addAll(Arrays.asList(ProveedorNombres.NOMBRES_FEMENINOS));
			break;
		case MASCULINO:
			s.addAll(Arrays.asList(ProveedorNombres.NOMBRES_MASCULINOS));
			break;
		case ALEATORIO:
			s.addAll(Arrays.asList(ProveedorNombres.NOMBRES_MASCULINOS));
			s.addAll(Arrays.asList(ProveedorNombres.NOMBRES_FEMENINOS));
			break;
		default:
			throw new RuntimeException("Sexo NULL");
		}
		if(complejidad.equals(Complejidad.ALEATORIA)){
			respuesta = s.get(new Random().nextInt(s.size()));
			if(new Random().nextBoolean()){
				respuesta+=" "+s.get(new Random().nextInt(s.size()));
			}
		}
		else{
			respuesta = s.get(new Random().nextInt(s.size()));
			if(complejidad.equals(Complejidad.COMPUESTA))
				respuesta+=" "+s.get(new Random().nextInt(s.size()));
		}
		return respuesta;
	}

	public static String generarApellido(Complejidad complejidad) {
		String s;
		if(complejidad.equals(Complejidad.ALEATORIA)){
			s = ProveedorApellidos.APELLIDOS[new Random().nextInt(ProveedorApellidos.APELLIDOS.length)];
			if(new Random().nextBoolean())
				s+=" "+ProveedorApellidos.APELLIDOS[new Random().nextInt(ProveedorApellidos.APELLIDOS.length)];
		}
		else{
			s = ProveedorApellidos.APELLIDOS[new Random().nextInt(ProveedorApellidos.APELLIDOS.length)];
			if(complejidad.equals(Complejidad.COMPUESTA))
				s+=" "+ProveedorApellidos.APELLIDOS[new Random().nextInt(ProveedorApellidos.APELLIDOS.length)];
		}
		return s;
	}
	
	public static String generarNombreYApellidos(Sexo sexo, Complejidad complejidadNombre, Complejidad complejidadApellido){
		return generarNombre(sexo, complejidadNombre)+" "+generarApellido(complejidadApellido);
	}
	
	public static List<String> generarListadoNombreYApellidos(int cantidad, Sexo sexo,Complejidad complejidadNombre, Complejidad complejidadApellido){
		List<String> s = new ArrayList<String>();
		for(int i=0;i<cantidad;i++){
			s.add(generarNombreYApellidos(sexo, complejidadNombre, complejidadApellido));
		}
		return s;
	}
	
	public static void generarInformeListadoNombreYApellidos(int cantidad, Sexo sexo,Complejidad complejidadNombre, Complejidad complejidadApellido){
		File f = new File("Listado_Nombre_y_Apellidos_Generados.txt");
		f.delete();
		try {
			f.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
		try(PrintWriter pw = new PrintWriter(f)){
			for(String s : generarListadoNombreYApellidos(cantidad, sexo, complejidadNombre, complejidadApellido)){
				pw.println(s);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("Ruta del archivo generado: "+System.getProperty("user.dir")+"/Listado_Nombre_y_Apellidos_Generados.txt");
		
	}


	public static enum Complejidad {
		SIMPLE,
		COMPUESTA,
		ALEATORIA
	}

}

Clases utilizadas (Importaciones)

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import java.util.Scanner;