StringWriter or StringBuilder

后端 未结 7 1983
盖世英雄少女心
盖世英雄少女心 2020-12-08 00:17

What is the difference between StringWriter and StringBuilder and when should I use one or the other?

7条回答
  •  没有蜡笔的小新
    2020-12-08 00:32

    StringBuilder and StringReader are used to improve performance in different situations.
    Use StringBuilder to improve performance on string manipulation such as concatenation, modifying string repeatedly.

    Random rnd = new Random();
    StringBuilder sb = new StringBuilder();
    
    // Generate 10 random numbers and store in sb.
    for (int i = 0; i < 10; i++)
    {
        sb.Append(rnd.Next().ToString("N5"));
    }
    Console.WriteLine("The original string:");
    Console.WriteLine(sb.ToString());
    
    // Decrease each number by one.
    for (int ctr = 0; ctr < sb.Length; ctr++)
    {
        if (Char.GetUnicodeCategory(sb[ctr]) == System.Globalization.UnicodeCategory.DecimalDigitNumber)
        {
            int number = (int)Char.GetNumericValue(sb[ctr]);
            number--;
            if (number < 0)
                number = 9;
    
            sb[ctr] = number.ToString()[0];
        }
    }
    Console.WriteLine("\nThe new string:");
    Console.WriteLine(sb.ToString());
    

    Use StringReader to parse a large amount of text in separate lines and minimize memory use while processing data. See next example where ReadLine method on StringReader simply scans for the next newline starting at the current postion, and then return a sbstring based on the field string.

    using (StringReader sr = new StringReader("input.txt"))
    {
        // Loop over the lines in the string or txt file.
        int count = 0;
        string line;
        while((line = sr.ReadLine()) != null)
        {
            count++;
            Console.WriteLine("Line {0}: {1}", count, line);
        }
    }
    

提交回复
热议问题