Je prends un texte et je brise des phrases - en créant un tableau avec chaque élément contenant une phrase complète. J'ai décidé que la meilleure façon de faire était d'utiliser la classe BreakIterator. Voici le code que je utilise:getSentenceInstance et les espaces
theSentences = new ArrayList<String>();
String myText = aString; //the text is produced through a text box
BreakIterator boundary = BreakIterator.getSentenceInstance();
boundary.setText(myText);
int start = boundary.first();
for (int end = boundary.next();
end != BreakIterator.DONE;
start = end, end = boundary.next())
{
String temp = myText.substring(start,end);
theSentences.add(temp.trim());
}
Cela fonctionne tout à fait bien lorsque l'utilisateur se souvient d'inclure un espace à la fin d'une phrase (que la plupart des gens). Cependant, les gens font des erreurs en tapant, et s'ils ne parviennent pas à mettre un espace après l'arrêt complet, le code ne semble pas réaliser que la fin de la phrase a été atteinte. Que puis-je faire à ce sujet? Je me rends compte que je pourrais utiliser regex à la place, mais il semble préférable d'utiliser BreakIterator car c'est pour cela qu'il a été conçu. Également écrire une regex qui fera la distinction entre les arrêts complets et toutes les autres utilisations possibles d'une période me fait mal à la tête :-)
Le document API indique que 'getSentenceInstance' fonctionne différemment selon les paramètres régionaux. Peut-être que vous pouvez trouver une locale qui correspond à votre langue * et * reconnaît les arrêts complets, même sans espace de fin. – us2012
Vous cherchez peut-être StringTokenizer? (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html) – Mike
(Plus précisément, utiliser des caractères de fin de phrase comme délimiteurs et activer le drapeau returnDelims. 'new StringTokenizer (myText,".!? ", true)') – Mike