2009-08-18 9 views
1

J'ai besoin d'un bon traitement d'enveloppement de mots pour Java. Pas trop difficile, sauf pour une ride: puisque je travaille sur une application internationalisée, elle doit gérer correctement les textes chinois, japonais et coréens. Dans ces langues, l'habillage de mots se produit entre les caractères, puisque les caractères eux-mêmes sont des mots et il n'y a pas d'espaces. Non seulement cela, mais puisque ce texte peut inclure des mots étrangers rendus avec des caractères latins, ces mots doivent être traités spécialement et ne pas rompre entre les caractères comme le reste du texte. Le wrapping doit être pris en charge à la fois pour le texte et le contexte graphique (coordonnées exprimées en unités de caractères ou de pixels).Enveloppement de mots internationalisé en Java

Y a-t-il un paquet existant qui fait cela? Je n'en ai pas vu. Si non, quelqu'un peut-il me montrer un bon algorithme pour gérer ce scénario? Le code aurait accès à un objet Locale correspondant à la langue du texte à encapsuler, si nécessaire. Un algorithme glouton (chaque ligne prend autant de texte que possible) est bien.

Répondre

3

BreakIterator devrait aider ici avec la rupture des séquences de caractères en mots. Si cela est insuffisant, je vérifierais le ICU project pour voir s'il avait quelque chose de mieux (une partie de l'implémentation Java vient de là). La gestion graphique dépend de votre bibliothèque graphique, mais l'API AWT/Swing Font prend en charge la détermination des métriques linéaires. (Si vous n'aviez pas d'instances 'Locale', vous pourriez probablement faire quelque chose d'une manière heuristique en utilisant Unicode blocks.)

1

Il semble que la bibliothèque ICU4J puisse faire ce dont vous avez besoin. Voir boundary analysis. Les exemples donnés sont pour ICU4C, et sont donc en C/C++, mais devraient aussi fonctionner à partir du paquet Java.

Questions connexes