una recortar quitar longitud extraer espacios ejemplos caracteres cadena c# .net string truncate

recortar - string c# ejemplos



Truncar cadena en palabras completas en.NET C# (9)

Esta solución también funciona (toma las primeras 10 palabras de myString):

String.Join(" ", myString.Split('' '').Take(10))

Estoy tratando de truncar un texto largo en C #, pero no quiero que mi cadena se corte a través de una palabra. ¿Alguien tiene una función que pueda usar para truncar mi cadena al final de una palabra?

P.ej:

"This was a long string..."

No:

"This was a long st..."


Gracias por tu respuesta Dave. He ajustado un poco la función y esto es lo que estoy usando ... a menos que haya más comentarios;)

public static string TruncateAtWord(this string input, int length) { if (input == null || input.Length < length) return input; int iNextSpace = input.LastIndexOf(" ", length, StringComparison.Ordinal); return string.Format("{0}...", input.Substring(0, (iNextSpace > 0) ? iNextSpace : length).Trim()); }


Heres lo que se me ocurrió. Esto es para obtener el resto de la oración también en trozos.

public static List<string> SplitTheSentenceAtWord(this string originalString, int length) { try { List<string> truncatedStrings = new List<string>(); if (originalString == null || originalString.Trim().Length <= length) { truncatedStrings.Add(originalString); return truncatedStrings; } int index = originalString.Trim().LastIndexOf(" "); while ((index + 3) > length) index = originalString.Substring(0, index).Trim().LastIndexOf(" "); if (index > 0) { string retValue = originalString.Substring(0, index) + "..."; truncatedStrings.Add(retValue); string shortWord2 = originalString; if (retValue.EndsWith("...")) { shortWord2 = retValue.Replace("...", ""); } shortWord2 = originalString.Substring(shortWord2.Length); if (shortWord2.Length > length) //truncate it further { List<string> retValues = SplitTheSentenceAtWord(shortWord2.TrimStart(), length); truncatedStrings.AddRange(retValues); } else { truncatedStrings.Add(shortWord2.TrimStart()); } return truncatedStrings; } var retVal_Last = originalString.Substring(0, length - 3); truncatedStrings.Add(retVal_Last + "..."); if (originalString.Length > length)//truncate it further { string shortWord3 = originalString; if (originalString.EndsWith("...")) { shortWord3 = originalString.Replace("...", ""); } shortWord3 = originalString.Substring(retVal_Last.Length); List<string> retValues = SplitTheSentenceAtWord(shortWord3.TrimStart(), length); truncatedStrings.AddRange(retValues); } else { truncatedStrings.Add(retVal_Last + "..."); } return truncatedStrings; } catch { return new List<string> { originalString }; } }


Intenta lo siguiente. Es bastante rudimentario. Simplemente encuentra el primer espacio a partir de la longitud deseada.

public static string TruncateAtWord(this string value, int length) { if (value == null || value.Length < length || value.IndexOf(" ", length) == -1) return value; return value.Substring(0, value.IndexOf(" ", length)); }


Mi contribución:

public static string TruncateAtWord(string text, int maxCharacters, string trailingStringIfTextCut = "&hellip;") { if (text == null || (text = text.Trim()).Length <= maxCharacters) return text; int trailLength = trailingStringIfTextCut.StartsWith("&") ? 1 : trailingStringIfTextCut.Length; maxCharacters = maxCharacters - trailLength >= 0 ? maxCharacters - trailLength : 0; int pos = text.LastIndexOf(" ", maxCharacters); if (pos >= 0) return text.Substring(0, pos) + trailingStringIfTextCut; return string.Empty; }

Esto es lo que uso en mis proyectos, con finalización opcional. El texto nunca excederá la longitud máxima de los caracteres máximos + caracteres finales.


Opción simplificada, agregada de caracteres troncales y la convirtió en una extensión.

public static string TruncateAtWord(this string value, int maxLength) { if (value == null || value.Trim().Length <= maxLength) return value; string ellipse = "..."; char[] truncateChars = new char[] { '' '', '','' }; int index = value.Trim().LastIndexOfAny(truncateChars); while ((index + ellipse.Length) > maxLength) index = value.Substring(0, index).Trim().LastIndexOfAny(truncateChars); if (index > 0) return value.Substring(0, index) + ellipse; return value.Substring(0, maxLength - ellipse.Length) + ellipse; }



Tomé su enfoque un poco más lejos:

public string TruncateAtWord(string value, int length) { if (value == null || value.Trim().Length <= length) return value; int index = value.Trim().LastIndexOf(" "); while ((index + 3) > length) index = value.Substring(0, index).Trim().LastIndexOf(" "); if (index > 0) return value.Substring(0, index) + "..."; return value.Substring(0, length - 3) + "..."; }

Estoy usando esto para truncar tweets.


yo uso esto

public string Truncate(string content, int length) { try { return content.Substring(0,content.IndexOf(" ",length)) + "..."; } catch { return content; } }