Hola,
¿Puedes intentar la lógica a continuación?
for (int i = 0; i < str.length(); i +=40) {
output.addValue(str.substring(i, Math.min(i +40, str.length())));
}
Avalados por :
Hola expertos,
tenemos un requisito
- truncar la cadena (combinación de palabras) en 40 caracteres. Por lo tanto, tenemos 1 campo de entrada y 2 campos de salida
- en el primer campo necesitamos verificar la última palabra si cae dentro de los 40 caracteres. Se agregará al primer campo, de lo contrario se moverá al segundo campo. (en el segundo campo también debemos aplicar la misma lógica) y los 40 restantes también se ajustarán en el segundo campo.
- por ejemplo. "Por favor, visite la sección de Recursos de la Comunidad" el recuento total para esta cadena es 49. ahora la longitud "Por favor, visite la sección de Recursos de la Comunidad" es de 40. por lo tanto, debemos ignorar "sección" y moverlo al siguiente campo.
por lo tanto, el primer campo debería ser hasta "Por favor, visite la sección de Recursos de la Comunidad" y el siguiente campo debería estar lleno como "para la sección"
Hola,
¿Puedes intentar la lógica a continuación?
for (int i = 0; i < str.length(); i +=40) {
output.addValue(str.substring(i, Math.min(i +40, str.length())));
}
He actualizado el código para que sea un poco más breve 🙂
Hola Anurag
Tu problema no es sencillo, de hecho. La primera solución que se me ocurre es dividir la cadena con String.split en la expresión regular \s+ (es decir, espacio en blanco). Sin embargo, String.split elimina el delimitador, lo que significa que todo el espacio en blanco desaparece de tu texto. No es bueno.
Sin embargo, hay una alternativa. Dividir en el límite de palabra \b conserva el espacio en blanco y, de hecho, también resuelve algunos casos particulares, como dividir en una coma.
Aquí tienes un código de ejemplo:
def splitLen = 40
def splitRegex = /\b/
def b = new StringBuilder()
originalString.split(splitRegex).each { s ->
if (b.length() + s.length() <= splitLen) {
// La cadena que se está construyendo puede contener esta subcadena.
b.append(s)
} else {
// La cadena que se está construyendo no puede contener esta subcadena.
output.addValue(b.toString())
b.setLength(0)
b.append(s)
}
}
if (b.length() > 0) {
output.addValue(b.toString())
}
Dividí la cadena original a lo largo del límite de palabra y luego recorro cada subcadena resultante. Un StringBuilder acumula cada cadena para ser incluida en la salida. Hay dos casos a manejar:
Como señala sriprasadshivaramabhat , por supuesto, el código debería estar envuelto en una función personalizada. Te dejo eso a ti.
Saludos,
Morten
Hola Anurag. Sería de ayuda si mostraras lo que has intentado hasta ahora. Saludos, Morten
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute