Probar:
String s = // long string
s.replaceAll("(.{10})", "$1<br>");
EDIT: Lo anterior funciona ... la mayoría de las veces. He estado jugando con eso y me encontré con un problema: dado que construye un patrón predeterminado internamente, se detiene en nuevas líneas. Para evitar esto, tienes que escribirlo de manera diferente.
public static String insert(String text, String insert, int period) {
Pattern p = Pattern.compile("(.{" + period + "})", Pattern.DOTALL);
Matcher m = p.matcher(text);
return m.replaceAll("$1" + insert);
}
y el lector astuto se darán cuenta de otro problema: tienes que escapar caracteres especiales de expresiones regulares (como "$ 1") en el texto de reemplazo o que obtendrá resultados imprevisibles.
También me puse curioso y comparé esta versión con la anterior de Jon. Este es más lento en un orden de magnitud (1000 reemplazos en un archivo de 60k tomaron 4.5 segundos con esto, 400ms con el suyo). De los 4.5 segundos, solo alrededor de 0.7 segundos realmente estaban construyendo el Patrón. La mayor parte estaba en la coincidencia/reemplazo por lo que ni siquiera se dirige a ese tipo de optimización.
Normalmente prefiero las soluciones menos prolijas a las cosas. Después de todo, más código = más errores potenciales. Pero en este caso debo admitir que la versión de Jon -que es realmente la implementación ingenua (quiero decir que en una buena forma ) - es significativamente mejor.
¡fantástico! ¿Y si no quiero poner
dentro de las palabras? ejemplo evitando cosas como: stackover
fluir y poner directamente
al final de la palabra? – Giancarlo
Entonces ese es un problema significativamente más difícil. Una expresión regular * puede * ser la mejor manera allí, pero primero deberá indicar los requisitos * muy * precisamente. –
una versión corta de tu código con expresiones regulares en esta publicación .. http: // stackoverflow.com/questions/10530102/java-parse-string-and-add-line-break-every-100-characters – mtk