Visual Basic.NET - Cortar cadena por espacio (sin cortar palabras)

   
Vista:

Cortar cadena por espacio (sin cortar palabras)

Publicado por peka (1 intervención) el 14/04/2011 22:47:14
Hola, pues estoy intentando escribir una cadena larga en un parrafo limitado, de 15 caracteres de ancho como máximo. Lo que busco es que si la palabra por donde tengo que hacer el corte no es espacio, o el caracter siguiente no es espacio, me valla buscando hacia atras, y cuando encuentre el espacio me haga el corte.

Ejemplo:

Hola, yo me llamo Juan y no me conoces.

Hola, yo me lla / mo Juan y no me conoces.

Hola, yo me
llamo Juan y no / me conoces.


Hola, yo me
llamo Juan y no
me conoces.

No se si me explico bien. ¿Hay alguien que me entienda y me pueda ayudar? es que lo intento hacer y es un jaleo! ¿o hay alguna función que haga esto?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Cortar cadena por espacio (sin cortar palabras)

Publicado por Joan B Fabregas (129 intervenciones) el 19/04/2011 14:16:59
Hola,

Una opción sería dividir el texto por los espacios y después ir componiendo las palabras separadas en grupos de menos de 15 caracteres de longitud.

El código sería algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Public Function CortarCadenaPorPalabras(CadenaEntrada As String, NumCaracteresEnParrafo As Integer) As IList(Of String)
 
        Dim retorno As List(Of String) = New List(Of String)    'lista con los parrafos
        Dim palabra As String
        Dim contenedor As String
 
        If CadenaEntrada.Length = 0 Then
            'si la cadena de entrada esta vacia devolvemos una coleccion vacia.
            Return retorno
        ElseIf CadenaEntrada.Length <= NumCaracteresEnParrafo Then
            'si la cadena tiene [NumCaracteresEnParrafo] caracteres o menos, devolvemos sólo un elemento con la cadena entera
            retorno.Add(CadenaEntrada)
            Return retorno
        End If
 
        'contenedor para almacenar las palabras mientras que la longitud del párrafo sea menor que [NumCaracteresEnParrafo] 
        contenedor = ""
        For Each palabra In CadenaEntrada.Split(" "c)
 
            'si la palabra tiene más de [NumCaracteresEnParrafo] caracteres seguidos, se trozea
            If palabra.Length >= NumCaracteresEnParrafo Then
                If contenedor.Length > 0 Then retorno.Add(contenedor)
                Do
                    Dim trozo As String = palabra.Substring(0, NumCaracteresEnParrafo - 1)
                    retorno.Add(trozo)
                    palabra = palabra.Remove(0, NumCaracteresEnParrafo - 1)
                Loop While palabra.Length >= NumCaracteresEnParrafo
            End If
 
            If palabra.Length > 0 Then
                If contenedor.Length + palabra.Length + 1 > NumCaracteresEnParrafo Then
                    retorno.Add(contenedor)
                    contenedor = palabra
                Else
                    contenedor = contenedor & " " & palabra
                End If
            End If
        Next
        If contenedor.Length > 0 Then retorno.Add(contenedor)
 
        Return retorno
    End Function



Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Cortar cadena por espacio (sin cortar palabras)

Publicado por Daniel (1 intervención) el 02/01/2013 20:49:53
Excelente, utilice el codigo y lo adapte a mi necesidad, funcionó perfecto. Muchas gracias¡¡
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar