¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Optimización de cadenas: cómo truncar y distribuir palabras en 40 caracteres de forma eficiente

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 12 Vistas
0
Cargando...

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"

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

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())));

}

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

He actualizado el código para que sea un poco más breve 🙂

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

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:

  1. El StringBuilder puede contener la subcadena actual
  2. El StringBuilder no puede contener la subcadena actual

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

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Hola Anurag. Sería de ayuda si mostraras lo que has intentado hasta ahora. Saludos, Morten

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?