Est-il possible de tronquer une chaîne Java à la limite de mot la plus proche après un certain nombre de caractères. Semblable à la fonction PHP wordwrap(), montrée dans ce example.Tronquer chaîne sur la limite de mot la plus proche
Répondre
Utilisez un java.text.BreakIterator
, quelque chose comme ceci:
String s = ...;
int number_chars = ...;
BreakIterator bi = BreakIterator.getWordInstance();
bi.setText(s);
int first_after = bi.following(number_chars);
// to truncate:
s = s.substring(0, first_after);
Vous pouvez utiliser une expression régulière
Matcher m = Pattern.compile("^.{0,10}\\b").matches(str);
m.find();
String first10char = m.group(0);
Avec la première approche vous finira avec une plus grande longueur que number_chars. Si vous avez besoin d'un maximum exact ou moins, comme pour un message Twitter, voir ma mise en œuvre ci-dessous.
Notez que l'approche regexp utilise un espace pour délimiter les mots, tandis que BreakIterator casse les mots même s'ils ont des virgules et d'autres caractères. Ceci est plus souhaitable.
Voici ma pleine fonction:
/**
* Truncate text to the nearest word, up to a maximum length specified.
*
* @param text
* @param maxLength
* @return
*/
private String truncateText(String text, int maxLength) {
if(text != null && text.length() > maxLength) {
BreakIterator bi = BreakIterator.getWordInstance();
bi.setText(text);
if(bi.isBoundary(maxLength-1)) {
return text.substring(0, maxLength-2);
} else {
int preceding = bi.preceding(maxLength-1);
return text.substring(0, preceding-1);
}
} else {
return text;
}
}
Solution avec BreakIterator
est pas vraiment simple lorsque la peine est la rupture URL, il se casse URL pas très belle façon. J'ai plutôt utilisé la solution de mine:
public static String truncateText(String text, int maxLength) {
if (text != null && text.length() < maxLength) {
return text;
}
List<String> words = Splitter.on(" ").splitToList(text);
List<String> truncated = new ArrayList<>();
int totalCount = 0;
for (String word : words) {
int wordLength = word.length();
if (totalCount + 1 + wordLength > maxLength) { // +1 because of space
break;
}
totalCount += 1; // space
totalCount += wordLength;
truncated.add(word);
}
String truncResult = Joiner.on(" ").join(truncated);
return truncResult + " ...";
}
Le séparateur/jointure vient de goyave. J'ajoute également ...
à la fin dans mon cas d'utilisation (peut être ommited).
- 1. Trier par la date la plus proche
- 2. PHP: texte tronquer aux limites de mot
- 3. Correspond à l'expression la plus proche dans SQL
- 4. Trouver la valeur la plus proche dans une liste ordererd
- 5. En utilisant la fonction Jquery la plus proche()?
- 6. Quelle est la licence OSS la plus proche sur CodePlex pour la licence CodeProject?
- 7. Aligner sur le marqueur le plus proche
- 8. Tronquer la longueur de la ligne stdin?
- 9. JQuery le plus proche() aider
- 10. Puis-je utiliser ActiveRecord pour trouver des lignes basées sur la plus proche-correspondance (distance levenshtein)
- 11. Comment convertir un double en valeur entière la plus proche?
- 12. Arrondir au plus proche cinq
- 13. Trouver la valeur numérique la plus proche dans la base de données
- 14. Dépassement de la limite de la mémoire Wordpress dépassée, SANS modification de la limite du serveur
- 15. Tronquer la table dans la transaction
- 16. requêtes SQL pour retourner un article dans la plage ou la plage la plus proche
- 17. Comment arrondir la valeur décimale jusqu'à la valeur 0,05 la plus proche?
- 18. SSRS 2008 Tronquer le contenu de la zone de texte
- 19. Tronquer les zéros d'une chaîne en Javascript
- 20. Utilisation de la commande la plus proche du succès dans le callback ajax
- 21. Rechercher la valeur la plus proche dans un tableau de doubles en C++?
- 22. PHP Limite de sortie de chaîne par caractères spécifiques
- 23. javascript limite affichage lien de la zone de texte
- 24. Tronquer les appels à la méthode
- 25. Comment arrondir à 0.5 le plus proche?
- 26. Dessiner une ligne PostGIS en utilisant la méthode Neighbour la plus proche
- 27. jquery le plus proche() en sélectionnant
- 28. Quelle est la meilleure façon de trouver le type correspondant le plus proche d'un type existant?
- 29. Arrondi au plus proche Ending Digits
- 30. Arrondi Mécanisme pour le plus proche de 0,05
C'est très bien, même si un bi.truncateAt() aurait été trop demander? :) –
Assurez-vous de tester que number_chars n'est pas plus grand que s.length(), sinon vous obtenez une exception. Pour info, j'ai essayé d'éditer le Java pour refléter ce fait, mais le montage a été rejeté. – mooreds