Namenskonverter

M4D-M4X

Bekanntes Mitglied
Hi Leute,

ich ersuche euch um Hilfe für einen bestmöglichen Denkansatz.
Und zwar bekomme ich aus der Datenbank Strings, die den Vornamen und den Nachnamen enthalten.
Sie haben folgendes Format:

Java:
  String fullname = "Nachname, Vorname";

So, die ganzen Namen werden in eine ArrayList gepackt und nun möchte ich sie wie folgt ausgeben lassen:

Es sollen prinzipiell immer nur die Vornamen ausgegeben werden, es sei denn, ein Vorname ist zwei oder mehrmals vorhanden. Wenn er zwei oder mehrmals vorhanden ist, wird nach dem Vornamen ein Punkt gesetzt und der erste Buchstabe des Nachnamens angehängt.
Falls der Fall eintreten würde, dass der Nachname sich bis auf einer bestimmten Stelle gleicht, sollte das Berücksichtigt werden und bis zur unterscheidenden Stelle ausgegeben werden.

Mein Denkansatz ist wie folgt:

1. String splitten und sowohl Vornamen als auch Nachnamen in eine seperate ArrayList<String[]> speichern
2. Ein ABC(char) Array und zwei Arrays(String[]), die so lang ist wie das ABC erstellen um die Namen zu Kategorisieren
3. Die kompletten Vornamen werden nun mithilfe des ABC Arrays Kategorisiert und in die bestimmte Buchstabenposition des Vornamen Arrays geschmissen
4. Durchsuche mir das komplette Vornamen String[] und schaue nach, ob sich ein Vorname zwei oder mehrmals im Array befindet
5. Wenn Ja, dann geh mir in das Kategorisierte Nachnamen Array und suche dir den Nachnamen raus, konvertiere ihn auf die anzahl der Buchstaben und klebe ihn an den VornamenString
6. Das ganze Vornamen Array wird ausgegeben


Jetzt ist meine Frage:

Ist mein Denkansatz zu kompliziert?
Gibt es eine bessere Lösung?
 

mariusbopp

Bekanntes Mitglied
poste aufjedenfall ma deine lösung beschäftige mich auch grade damit :D
aber bis jetzt bin ich nocht nicht soweit das ich die daten in arrays packe:eek:
 
G

Gast2

Gast
Ich würde das anders machen:

Du erstellst dir eine Map<String, List<String>> in der du deine Namen ablegst. Als Key nimmst du den Vorname, die Nachnamen schreibst du in eine List. Falls der Vorname noch nicht vorhanden ist legst du den zusammen mit einer neuen List in die Map, falls der Vorname schon vorhanden ist fügst du den Nachnamen einfach der entsprechenden List hinzu.
Wenn du dann alle Einträge durch hast kannst du die Map durchlaufen:
- Wenn in der List mehr als 1 Eintrag ist, dann gibst du dne Vornamen + Nachname (mit x Stellen) aus
- Ansonsten nur den Vornamen

EDIT:
Mal auf die schnelle was zusammengeschrieben:
Java:
    public static void main(String[] args) throws NoSuchAlgorithmException {
        List<String> names = new ArrayList<String>();
        names.add("Müller, Hans");
        names.add("Meyer, Hans");
        names.add("Müller, Karl");
        names.add("Otto, Otto");

        Map<String, List<String>> nameMap = generateMap(names);

        // output
        for (String vorname : nameMap.keySet()) {
            List<String> nachnamen = nameMap.get(vorname);

            if (nachnamen.size() > 1) {
                for (String nachname : nachnamen) {
                    System.out.println(vorname + " " + nachname.substring(0, Math.min(3, nachname.length())) + ".");
                }
            } else {
                System.out.println(vorname);
            }
        }
    }

    private static Map<String, List<String>> generateMap(List<String> names) {
        Map<String, List<String>> nameMap = new HashMap<String, List<String>>();

        for (String name : names) {
            // split at ", "
            String[] tokens = name.split(", ");
            if (tokens.length != 2) {
                continue;
            }
            String vorname = tokens[1];
            String nachname = tokens[0];

            if (!nameMap.containsKey(vorname)) {
                // Vorname noch nicht vorhande
                List<String> list = new ArrayList<String>();
                list.add(nachname);
                nameMap.put(vorname, list);
            } else {
                List<String> list = nameMap.get(vorname);
                list.add(nachname);
            }
        }

        return nameMap;
    }
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Das mit dem "(mit x Stellen)" ist da noch der trickreichste Teil :) Man würde wohl erstmal die kompletten Nachnamen speichern. Am Ende müßte man die Liste dieser kompletten Nachnamen (für jeden Vornamen) analysieren, um rauszufinden, wie viele Zeichen des Nachnamens angegeben werden müssen, damit es nicht zu Mehrdeutigkeiten kommt...
 
G

Gast2

Gast
Am Ende müßte man die Liste dieser kompletten Nachnamen (für jeden Vornamen) analysieren, um rauszufinden, wie viele Zeichen des Nachnamens angegeben werden müssen, damit es nicht zu Mehrdeutigkeiten kommt...
Das darf der TE dann noch anpassen ;)
 

M4D-M4X

Bekanntes Mitglied
Eike B, ich werd mir heut Nachmittag oder Abend mal das Beispiel ansehen, und versuchen zu verstehen, wie man eine Map bedient usw..
Ich habe mit Maps noch nichts zu tun gehabt, aber ich Meld mich wieder wenns Fragen gibt :)

Vielen Dank für die schnelle Hilfe
 

Neue Themen


Oben