no.bekk.bekkopen.person.NavnGenerator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of nocommons Show documentation
Show all versions of nocommons Show documentation
The NoCommons library is a collection of helper classes for manipulation and validation of data specific to
Norway and Norwegian citizens.
package no.bekk.bekkopen.person;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* Generator for Norwegian names - a {@link Navn}.
*
* Picks random names from the most common names in 2009.
*
* Sources:
*
* - Statistisk
* Sentralbyrås liste over de 712 mest brukte kvinnenavn i 2009
* - Statistisk
* Sentralbyrås liste over de 580 mest brukte mannsnavn i 2009
* - Statistisk
* Sentralbyrås liste over de 3229 mest brukte etternavn i 2009
*
*
*/
public class NavnGenerator {
private final static int caAntallKvinnerSomHarMellomnavnIProsent = 22;
private final static int caAntallMennSomHarMellomnavnIProsent = 14;
private final static List kvinnenavn = csv2List(NavnGenerator.class
.getResourceAsStream("/fornavn_kvinner.csv"));
private final static List mannsnavn = csv2List(NavnGenerator.class.getResourceAsStream("/fornavn_menn.csv"));
private final static List etternavn = csv2List(NavnGenerator.class.getResourceAsStream("/etternavn.csv"));
private NavnGenerator() {
super();
}
public static Navn genererMannsnavn() {
return genererNavn(1, KJONN.MANN).get(0);
}
public static Navn genererKvinnenavn() {
return genererNavn(1, KJONN.KVINNE).get(0);
}
public static List genererMannsnavn(int antall) {
return genererNavn(antall, KJONN.MANN);
}
public static List genererKvinnenavn(int antall) {
return genererNavn(antall, KJONN.KVINNE);
}
public static List genererNavn(int antall) {
return genererNavn(antall, KJONN.BEGGE);
}
private static List genererNavn(final int antall, final KJONN kjonn) {
List navneliste = new ArrayList(antall);
KJONN kjonnSwitch = kjonn;
while (navneliste.size() < antall) {
if (KJONN.erBegge(kjonn)) {
kjonnSwitch = KJONN.byttKjonn(kjonn);
}
Navn navn = genererNavn(kjonnSwitch);
if (!navneliste.contains(navn)) {
navneliste.add(navn);
}
}
return navneliste;
}
private static Navn genererNavn(final KJONN kjonn) {
String fnavn, mnavn = null, enavn;
int indexF = 0;
if (KJONN.erKvinne(kjonn)) {
indexF = new Random().nextInt(kvinnenavn.size() - 1);
fnavn = kvinnenavn.get(indexF);
} else {
indexF = new Random().nextInt(mannsnavn.size() - 1);
fnavn = mannsnavn.get(indexF);
}
if (genererMellomnavn(kjonn)) {
int indexM = new Random().nextInt(etternavn.size() - 1);
mnavn = etternavn.get(indexM);
}
int indexE = new Random().nextInt(etternavn.size() - 1);
enavn = etternavn.get(indexE);
return new Navn(fnavn, mnavn, enavn);
}
private static boolean genererMellomnavn(KJONN kjonn) {
if (KJONN.erKvinne(kjonn)) {
if (new Random().nextInt(100) <= caAntallKvinnerSomHarMellomnavnIProsent) {
return true;
}
} else {
if (new Random().nextInt(100) <= caAntallMennSomHarMellomnavnIProsent) {
return true;
}
}
return false;
}
private static List csv2List(InputStream is) {
InputStreamReader isr = new InputStreamReader(is, Charset.forName("UTF-8"));
BufferedReader br = new BufferedReader(isr);
List vList = new ArrayList();
String[] array;
String line;
try {
while ((line = br.readLine()) != null) {
array = line.split("[ ]*,[ ]*");
for (int i = 0; i < array.length; i++) {
vList.add(array[i]);
}
}
br.close();
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
return vList;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy