2009-08-18 13 views
1

Ich brauche eine gute Word-Wrapping-Handhabung für Java. Nicht zu schwierig, abgesehen von einer Falte: Da ich an einer internationalisierten Anwendung arbeite, muss sie mit chinesischem, japanischem und koreanischem Text richtig umgehen. In diesen Sprachen erfolgt das Umbrechen von Wörtern zwischen Zeichen, da die Zeichen selbst Wörter sind und keine Leerzeichen vorhanden sind. Nicht nur das, aber da dieser Text auch Fremdwörter enthalten kann, die mit lateinischen Zeichen dargestellt werden, müssen die diese Wörter speziell behandelt werden und nicht zwischen Zeichen wie der Rest des Textes unterbrochen werden. Wrapping muss sowohl für den Text- als auch für den Grafikkontext unterstützt werden (Koordinaten ausgedrückt in Zeichen- oder Pixeleinheiten).Internationalisiertes Word-Wrapping in Java

Gibt es ein bestehendes Paket, das das tut? Ich habe keinen gesehen. Wenn nicht, kann mir jemand einen guten Algorithmus für die Handhabung dieses Szenarios zeigen? Der Code hätte Zugriff auf ein Objekt Locale, das der Sprache des zu umschließenden Textes entspricht, falls erforderlich. Ein Greedy-Algorithmus (jede Zeile benötigt so viel Text wie möglich) ist in Ordnung.

Antwort

3

BreakIterator sollte hier helfen, Zeichenfolgen in Worte zu brechen. Wenn das nicht ausreicht, würde ich die ICU project überprüfen, um zu sehen, ob es etwas besseres hatte (einige der Java-Implementierung kommt von dort). Die Verarbeitung von Grafiken hängt von Ihrer GUI-Bibliothek ab, aber die API AWT/Swing Font unterstützt die Bestimmung von Zeilenmetriken. (Wenn Sie keine "Gebietsschema" -Instanzen haben, können Sie wahrscheinlich etwas heuristisch mit Unicode blocks tun.)

1

Es scheint, dass die ICU4J-Bibliothek das tun kann, was Sie brauchen. Siehe boundary analysis. Die angegebenen Beispiele sind für ICU4C und daher in C/C++, sollten aber auch vom Java-Paket aus funktionieren.