2011-02-15 19 views
7

Estoy intentando:subcadena StringBuilder C#

1 string pal = "Juan  1David  1Correa"; 
2 StringBuilder sb = new StringBuilder(pal); 
3 Console.writeline(sb.ToString(0,9)); 
4 Console.writeline(sb.ToString(10,14)); 
5 Console.writeline(sb.ToString(15,26)); 

Sin embargo, en la línea 4 Se produce una excepción.

¿Por qué?

+0

¿Cuál es la excepción lanzada? Esto también me parece un uso extraño de 'StringBuilder', ¿qué estás tratando de lograr? –

Respuesta

26

El segundo argumento para StringBuilder.ToString(int, int) representa longitud de la subcadena deseada, no su índice final.

Recupera una subcadena de esta instancia . La subcadena comienza en una posición de carácter especificada de y tiene una longitud especificada de .

Por ejemplo, la última sentencia, probablemente debería ser:

Console.WriteLine(sb.ToString(15, 12)); 

Por otro lado, si lo que quieres es conseguir sub-secuencias de la cadena original, es posible que utilices el método String.Substring(int, int) .

+0

Entonces, ¿cómo puedo hacer una subcadena? Si utilizo una subcadena, ocurre lo mismo – Caipivara

+0

Muchas gracias :), tendré que aprender a leer: P – Caipivara

+1

@Daniel GR: Para corregir su última afirmación, si está utilizando 'Subcadena', podría intentar' Consola .WriteLine (sb.ToString(). Subcadena (15)); ' –

1

El segundo parámetro es la longitud pero no el último índice. Entonces en tu caso 15 + 26 = 41 que está fuera de los límites.

2

The docs indican claramente que ArgumentOutOfRangeException se lanzará cuando "La suma de startIndex y longitud sea mayor que la longitud de la instancia actual".

+1

¡¡Qué !!!!!!!!!!! – Caipivara

1

El segundo argumento es la longitud, no el "carácter final". No puede encontrar 14 caracteres comenzando desde el 10 °, de ahí el error.

0

En primer lugar, debe documentarnos qué excepción recibe en lugar de dejarnos en la oscuridad para tratar de resolverlo nosotros mismos, entonces como una suposición, diría que su cadena no contiene más de 24 caracteres. .

3

segundo parámetro es la longitud, por lo que debe ser

Console.writeline(sb.ToString(10,5)); 
+0

¿Por qué 10,4 ????????? – Caipivara

+0

De 10 a 14 son 4 ;-) – Tokk

+0

En realidad debería ser 5 para obtener los caracteres en los índices 10, 11, 12, 13 y 14. – juharr

1

Cuando ejecuto esto, la excepción se produce en la línea 5, que tiene mucho sentido, ya que no hay suficientes caracteres en su cadena de entrada a generar 26 caracteres a partir de 15.

0

El método StringBuilder.ToString no funciona como esperaba. Los parámetros son:

  1. startIndex: La posición de partida de la subcadena en este caso.
  2. longitud: Longitud de la subcadena.

Así que estás comenzando en el índice 15 y tratando de obtener los próximos 26 caracteres, que van más allá de la longitud de la cadena.

La documentación se puede encontrar here.

0

Compruebe que su cadena contiene caracteres de espacio dentro de ella y no tab. caracteres.Esta es la única razón por la que puede tener una excepción en la línea . Pero incluso si su cadena contiene espacios, tendrá con una excepción en la línea porque 26 es la longitud de la subcadena, no el índice del último carácter.