2011-03-03 8 views
6

texto:subcadena de palabras

Sed ut perspiciatis unde omnis iste natus error sit voluptatem ac

quiero subcadena palabras no en forma regular como word.Substring (1, 29).

forma habitual:

"Sed ut perspiciatis om unde"

pero quiero: "Sed ut unde perspiciatis"

tan sólo palabras llenas

se muestran. si se corta la palabra dentro de una palabra antes, se mostrará. espero entender lo que estoy buscando. parámetro

+3

¿Cómo sabe lo que es y lo que no lo es, una palabra? Búsqueda de diccionario? –

+0

Posible (?) Duplicado de http://stackoverflow.com/questions/4556151/linq-splitting-up-a-string-with-maximum-length-but-not-chopping-words-apart/4556369#4556369 –

+0

Sheesh ¡Supongo que tu C# es mejor que tu inglés! ;) Pero gracias por la pregunta, tuve lo mismo. – Bart

Respuesta

12
public static String ParseButDontClip(String original, int maxLength) 
{ 
    String response = original; 

    if (original.Length > maxLength) 
    { 
     int lastSpace = original.LastIndexOf(' ', original.Length - 1, maxLength); 
     if (lastSpace > -1) 
      response = original.Substring(0, lastSpace); 
    } 
    return response; 
} 

de String.LastIndexOf segundo es en realidad el final de la subcadena a buscar - y el más largo es hasta qué punto atrás hacia el comienzo tiene que ir.

Me lo consigo cada vez que lo uso.

+0

¿Qué pasa si su cadena es esta: 'Sed ut perspiciatis unde'? ¿No se quitaría 'unde 'en este caso? –

+0

exactamente, debe desaparecer. con el último índice siempre obtengo "El recuento debe ser positivo y el recuento debe hacer referencia a una ubicación dentro de la cadena/matriz/colección. Nombre del parámetro: recuento" – senzacionale

+0

Me parece que "unde" debe permanecer porque es una palabra completa en la oración original ... ¿Correcto? –

1

Se podría dividirlo por espacios en blanco y luego jugar con la matriz