web-dev-qa-db-fra.com

C # String.Substring équivalent pour StringBuilder?

StringBuilder ne semble pas avoir de méthode Substring (start, len) ... que me manque-t-il ici?

26
James

La classe StringBuilder a une version spéciale de la méthode ToString qui prend deux arguments, exactement comme Substring (startIndex, length) .

 StringBuilder sb = new StringBuilder("This is a Test");
 string test = sb.ToString(10, 4);
 Console.WriteLine(test);   // result = Test
51
Steve

voici toutes les façons d'obtenir la sous-chaîne souhaitée:

StringBuilder b = new StringBuilder();
b.Append("some text to test out!");
string s = b.ToString(0, 6);
//or ....
char[] letters = new char[6];
b.CopyTo(0, letters, 0, 6);
string s1 = new string(letters);
//or
string s2 = null;
for (int i = 0; i < 6; i++)
{
   s2 += b[i];
}
1
terrybozzio

Une autre approche, si vous ne voulez pas construire une chaîne entière (StringBuilder.ToString ()) et obtenir la sous-chaîne:

  public static StringBuilder SubString(this StringBuilder input, int index, int length)
{
    StringBuilder subString = new StringBuilder();
    if (index + length - 1 >= input.Length || index < 0) 
    {
        throw new ArgumentOutOfRangeException("Index out of range!"); 
    }
    int endIndex = index + length;
    for (int i = index; i < endIndex; i++)
    {
        subString.Append(input[i]);
    }
    return subString;
}
1
Naresh