package de.tutorials.bk;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Test {
private static final List<String> input = Arrays.asList(
"ESseN",
"MÜnChen",
"BAD ENDoRF",
"a",
null,
"NeuBurG am inn",
"NeUKIrchen vorm waLd",
"passau"
);
private static final List<String> ignore = Arrays.asList(
"in",
"am",
"an",
"der",
"vor",
"vorm"
);
public static void main(String[] args) {
new Test().work();
}
public void work() {
// Ausgabe vor der Umwanldung
System.out.println("Vorher:");
print(input);
// Zweite Liste mit Ergebnis vorbereiten
List<String> output = new ArrayList<String>();
for (String str : input) {
// Ergebnis in neue Liste schreiben
output.add(ucWords(str));
}
// Alle Daten abgearbeitet, wieder ausgeben
System.out.println("Nachher:");
print(output);
}
private void print(List<String> daten) {
// Trenner ausgeben
System.out.println("===================");
// Alle Strings der Liste ausgeben
for (String str : daten) {
System.out.println(str);
}
// Abschließend eine Leerzeile
System.out.println();
}
private String ucWords(String sentence) {
// NPE abfangen
if (sentence == null) {
return null;
}
// erst in kleinbuchstaben ändern und unnötige spaces entfernen
String str = sentence.trim().toLowerCase();
// dann in worte aufteilen
String[] words = str.split("\\s");
// Puffer für Ergebnis vorbereiten
StringBuilder result = new StringBuilder();
// Alle Worte durchlaufen
for (String word : words) {
// Wort ignorieren?
if(ignore.contains(word)) {
result.append(word);
} else {
// Ersten Buchstaben immer groß
result.append(Character.toUpperCase(word.charAt(0)));
// Den Rest (falls vorhanden) ohne Änderung übernehmen
if (word.length() > 1) {
result.append(word.substring(1));
}
}
// Wort abgeschlossen, Leerzeichen hinzufügen
result.append(' ');
}
// Das letzte, nicht mehr benötigte Leerzeichen wieder entfernen
if (result.length() > 0) {
result.setLength(result.length() - 1);
}
// Ergebnis zurückgeben
return result.toString();
}
}