ACTUALIZACIÓNWhat Gabe said
b.ToString(). Count (c => c == '\ n') funcionaría también en este caso, y tal vez no ser mucho menos eficiente (aparte de la creación una copia separada de la cadena !).
una manera mejor, más rápido que la creación de una cadena de la StringBuilder y la división de ella (o la creación de la cadena y
regex
ing ella), es mirar en el StringBuilder y contar el número de
'\n'
caracteres no en.
El siguiente método de extensión enumerará a través de los caracteres en el generador de cadenas, luego puede linq hasta que su corazón esté satisfecho.
public static IEnumerable<char> GetEnumerator(this StringBuilder sb)
{
for (int i = 0; i < sb.Length; i++)
yield return sb[i];
}
... usa aquí, el recuento será 4
StringBuilder b = new StringBuilder();
b.AppendLine("Hello\n");
b.AppendLine("World\n");
int lineCount = b.GetEnumerator().Count(c => c =='\n');
¿Ha considerado contar los saltos de línea? –
El único problema con el recuento de saltos de línea es que StringBuilder no tiene métodos de buscar/indexar: necesita usar la propiedad indexada de Chars o contar en la cadena resultante (ToString()). Ambos pueden ser ineficientes si necesita contar la línea repetidamente. – VinayC
Jon, hay una serie de soluciones muy obvias para esto; ¿Podría dar contexto para explicar por qué estas soluciones no son viables para usted? – tenfour