E 'possibile troncare una stringa Java al limite della parola più vicino dopo un numero di caratteri. Simile alla funzione PHP wordwrap(), mostrata in questo example.Stringa troncata sul limite della parola più vicina
risposta
Utilizzare un java.text.BreakIterator
, qualcosa di simile:
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);
È possibile utilizzare le espressioni regolari
Matcher m = Pattern.compile("^.{0,10}\\b").matches(str);
m.find();
String first10char = m.group(0);
Con il primo approccio si finirà con una lunghezza più grande di number_chars. Se hai bisogno di un massimo esatto o meno, come per un messaggio di Twitter, vedi la mia implementazione qui sotto.
Si noti che l'approccio regexp utilizza uno spazio per delimitare le parole, mentre BreakIterator interrompe le parole anche se contengono virgole e altri caratteri. Questo è più desiderabile.
Qui è la mia funzione completa:
/**
* 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;
}
}
Soluzione con BreakIterator
non è davvero semplice quando si rompe frase è URL, si rompe URL non modo molto piacevole. Ho usato piuttosto la mia soluzione:
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 + " ...";
}
Splitter/Joiner è di guava. Aggiungo anche ...
alla fine nel mio uso cas (può essere omesso).
- 1. Qual è l'algoritmo migliore per la parola più vicina
- 2. La stringa RODBC viene troncata
- 3. Algoritmo per l'Octree per la vicina più vicina seach
- 4. Get prima parola della stringa
- 5. Trova l'ora più vicina
- 6. jQuery selezione TR più vicina
- 7. Come troncare una stringa in PHP alla frase più vicina ad un certo numero di caratteri?
- 8. Stringa troncata su intere parole in .NET C#
- 9. limite sulla dimensione della stringa in C++?
- 10. soffitto a 50 più vicina
- 11. QPlainTextEdit cronologia troncata linewise
- 12. "Trova la posizione più vicina" per CAP?
- 13. Regex usando il limite della parola ma la parola termina con a. (Punto)
- 14. Come trovare la parola più vicina a un vettore utilizzando word2vec
- 15. Rimozione della prima visualizzazione della parola da una stringa?
- 16. Stringa troncata nei modelli di lama di Laravel
- 17. limite parola chiave distinta a una colonna
- 18. Javascript cerca l'indice della parola in stringa (non fa parte della parola)
- 19. Lunghezza stringa limite
- 20. più vicina coppia somma in due matrici ordinate
- 21. google maps api v3 - streetview più vicina
- 22. Arrotondare un timestamp alla data più vicina
- 23. Risultato ricerca Linq dalla corrispondenza più vicina
- 24. MYSQL Data Arrotonda all'ora più vicina
- 25. javascript regexp per il rilevamento limite di parola con parentesi
- 26. Iterare attraverso una stringa parola per parola
- 27. Utilizzo della memoria limite?
- 28. Scrittura della stringa sul flusso di output
- 29. il modo più semplice per ottenere ogni parola tranne l'ultima parola da una stringa
- 30. Come estendere la selezione al limite della parola utilizzando JavaScript, una sola volta?
Questo è fantastico, anche se un bi.truncateAt() sarebbe stato troppo chiedere? :) –
Assicurati di verificare che number_chars non sia più grande di s.length(), altrimenti ottieni un'eccezione. Cordiali saluti, ho provato a modificare il java per riflettere questo fatto, ma la modifica è stata respinta. – mooreds