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
- Generar todos los nombres dado Sexo
- Generar una parte de todos los nombres dados cantidad y Sexo
- Generar todos los apellidos
- Generar una parte de todos los apellidos dado una cantidad
- Generar un apellido dado Complejidad
- Generar un nombre completo dado Sexo, Complejidad del nombre y Complejidad del apellido
- Generar listado de nombres completos dados cantidad, Sexo, Complejidad del nombre y Complejidad del apellido
- Generar Informe txt del listado de nombres completos dados cantidad, Sexo, Complejidad del nombre y Complejidad del apellido
Generar nombre dado Sexo y Complejidad
- Arquetipo:
generarNombre(Sexo, Complejidad)
- Par谩metros:
Sexo
yComplejidad
del nombre - Descripci贸n: Permite generar de forma aleatoria un nombre dado su
Sexo
yComplejidad
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 del
Sexo
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 yComplejidad
del apellido. - Descripci贸n: Permite generar un nombre completo con nombre/s y apellido/s con determinado
Sexo
,Complejidad
del nombre yComplejidad
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 yComplejidad
de los apellidos. - Descripci贸n: Permite generar una cantidad determinada de nombres con apellidos con determinado
Sexo
,Complejidad
del nombre yComplejidad
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 yComplejidad
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 yComplejidad
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 femeninoMASCULINO
: Permite generar nombres de sexo masculinoALEATORIO
: 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 RojasCOMPUESTA
: 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;