Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Sonderzeichen in einem String gezeichnen/bearbeiten
Hi,
folgendes problem:
Wenn ich einen String eingebe: zb.:
Java:
String nachricht = " Cola macht süchtig. ";
Der Text soll so formatiert werden, dass zum Schluss dasteht:
Cola macht !süchtig!
Sobald ein Wort Umlaute oder Zahlen enthält wird es mit Rufzeichen markiert.
Mehrfach Leerzeichen werden gekürzt (auf nur eines) und der Punkt zum Schluss wird entfernt.
Leerzeichen am anfang und am ende kommen ganz weg.
Wo ich keinen Plan habe: Wie löse ich das Problem mit den Rufzeichen und dem mehrfach Leerzeichen.
Leerzeichen am anfang und am ende kann ich mit trim() weggeben. Den Punkt mit replace und dann stehe ich an :-(
Falls in dem Text die einzelnen Wörter immer mit Leerzeichen getrennt sind kannst du den Nachrichten String mit der split(" ") Methode in die einzelnen Wörter splitten und jedes Wort einzeln überprüfen.
Falls in dem Text die einzelnen Wörter immer mit Leerzeichen getrennt sind kannst du den Nachrichten String mit der split(" ") Methode in die einzelnen Wörter splitten und jedes Wort einzeln überprüfen.
du könntest natürlich auch eine Schleife drüberrennen lassen , die jedes byte anschaut und dann entscheided ob es ersetzt werden soll oder nicht , und wenn ja mit welchem.
Wie wäre es mit so etwas? Natürlich kann man sich überlegen, ob es nicht klüger ist, das Ergebnis in einer Liste unterzubringen, um die Wörter weiterhin getrennt zu haben.
Java:
public static void main(String[] args) {
String msg = " Cola macht süchtig. ";
StringTokenizer st = new StringTokenizer(trim(msg));
StringBuilder result = new StringBuilder();
while (st.hasMoreTokens()) {
String s = st.nextToken();
if (hasSpecialChars(s)) {
result.append("!" + s + "! ");
} else {
result.append(s + " ");
}
}
result.deleteCharAt(result.length() - 1);
System.out.println(result);
}
public static String trim(String s) {
return s.replaceFirst(".\\s$", "");
}
public static boolean hasSpecialChars(String s) {
return s.matches(".*[\\däöüÄÖÜ].*");
}
replaceAll(…) hat als Parameter einen regulären Ausdruck, und dort steht der Punkt für ein beliebiges Zeichen, kurz: Du machst aus nachricht eine leere Zeichenkette.
Irgendwie zusammenfügen und dann die rufzeichen einfügen und leere [] rauschlöschen...
Oder gibts schon beim splitten ne elegantere Lösung.
EDIT:
Sry ich habe diese antwort zeitgleich mit dem letzten beitrag von Wortraum erstellt.
Ich werde mir mal genau anschauen was der code da macht und am abend poste ich dann ob ich mich auskenne oder nicht.
Lösungen gibt es viele, beispielsweise den StringTokenizer oder das vorherige Ersetzen aufeinanderfolgender Leerzeichen durch ein einzelnes. Auch so, wie Du es jetzt hast, kann man es machen, aber dann muß man eben noch alle leeren String filtern.
Mir ist übrigens eingefallen, daß in meinem Fall eine Ausnahme geworfen werden kann, da ich im letzten Schritt frech von StringBuilder das letzte Zeichen abschneide, ohne zu prüfen, ob er überhaupt Zeichen enthält.
Danke für die Lösungsidee.
Danke für die Lösung mit dem Stringtokenizer.
Was ich nicht verstehe: Wie findest du sowas? Ich meine ich hab als pdf so ein codebuch hab auf der java.sun seite alles über string gelesen (String (Java 2 Platform SE v1.4.2)) usw. und trotzdem nie was vom stringtokenizer gehört.