Quantcast
Channel: Strg+Shift+R
Viewing all articles
Browse latest Browse all 50

Simple Random Name Generator for Java

$
0
0
Today i needed a name generator so i wrote one myself (i didn't like the existing ones i found via Google;). Here is the test code i used:


NameGenerator gen = new NameGenerator();
for (int i = 0; i < 30; i++) { System.out.println(gen.getName()); }


It produces names like:

Pausyp
Braurjnn
Thushoob
Einnjk
Qeidegh
Aub
Xoihut
Voopych
Gljint
Och
Stontaigh
Loofautt
Grennoogh
Jshjnt
Zjlouv
Fabeih
Aishof
Hoir
Ait
Jihoint
Aiv
Poim
Flott
Ustjv
Zjis
Xittoutt

I also added constructors for complete customization of the generate process. Here is the code:


public class NameGenerator {

private List vocals = new ArrayList();
private List startConsonants = new ArrayList();
private List endConsonants = new ArrayList();
private List nameInstructions = new ArrayList();

public NameGenerator() {
String demoVocals[] = { "a", "e", "i", "o", "u", "ei", "ai", "ou", "j",
"ji", "y", "oi", "au", "oo" };

String demoStartConsonants[] = { "b", "c", "d", "f", "g", "h", "k",
"l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "z",
"ch", "bl", "br", "fl", "gl", "gr", "kl", "pr", "st", "sh",
"th" };

String demoEndConsonants[] = { "b", "d", "f", "g", "h", "k", "l", "m",
"n", "p", "r", "s", "t", "v", "w", "z", "ch", "gh", "nn", "st",
"sh", "th", "tt", "ss", "pf", "nt" };

String nameInstructions[] = { "vd", "cvdvd", "cvd", "vdvd" };

this.vocals.addAll(Arrays.asList(demoVocals));
this.startConsonants.addAll(Arrays.asList(demoStartConsonants));
this.endConsonants.addAll(Arrays.asList(demoEndConsonants));
this.nameInstructions.addAll(Arrays.asList(nameInstructions));
}

/**
*
* The names will look like this
* (v=vocal,c=startConsonsonant,d=endConsonants): vd, cvdvd, cvd, vdvd
*
* @param vocals
* pass something like {"a","e","ou",..}
* @param startConsonants
* pass something like {"s","f","kl",..}
* @param endConsonants
* pass something like {"th","sh","f",..}
*/
public NameGenerator(String[] vocals, String[] startConsonants,
String[] endConsonants) {
this.vocals.addAll(Arrays.asList(vocals));
this.startConsonants.addAll(Arrays.asList(startConsonants));
this.endConsonants.addAll(Arrays.asList(endConsonants));
}

/**
* see {@link NameGenerator#NameGenerator(String[], String[], String[])}
*
* @param vocals
* @param startConsonants
* @param endConsonants
* @param nameInstructions
* Use only the following letters:
* (v=vocal,c=startConsonsonant,d=endConsonants)! Pass something
* like {"vd", "cvdvd", "cvd", "vdvd"}
*/
public NameGenerator(String[] vocals, String[] startConsonants,
String[] endConsonants, String[] nameInstructions) {
this(vocals, startConsonants, endConsonants);
this.nameInstructions.addAll(Arrays.asList(nameInstructions));
}

public String getName() {
return firstCharUppercase(getNameByInstructions(getRandomElementFrom(nameInstructions)));
}

private int randomInt(int min, int max) {
return (int) (min + (Math.random() * (max + 1 - min)));
}

private String getNameByInstructions(String nameInstructions) {
String name = "";
int l = nameInstructions.length();

for (int i = 0; i < l; i++) { char x = nameInstructions.charAt(0); switch (x) { case 'v': name += getRandomElementFrom(vocals); break; case 'c': name += getRandomElementFrom(startConsonants); break; case 'd': name += getRandomElementFrom(endConsonants); break; } nameInstructions = nameInstructions.substring(1); } return name; } private String firstCharUppercase(String name) { return Character.toString(name.charAt(0)).toUpperCase() + name.substring(1); } private String getRandomElementFrom(List v) {
return v.get(randomInt(0, v.size() - 1));
}
}

Viewing all articles
Browse latest Browse all 50

Trending Articles