StringBuilder: как получить финальную строку?

Да, как и другие, используйте ниже API для получения комментариев, но вы можете получить только 100 максимум за раз. Но вы получаете nextPageToken в ответ от предыдущего вызова api и передаете nextPageToken на страницуToken для следующего вызова api, пока nextPageToken не определен.

https://www.googleapis.com/youtube/v3/commentThreads?key={your_api_key}&textFormat=plainText&part=snippet&videoId={video_id}&maxResults=100&pageToken={nextPageToken}
57
задан Peter Mortensen 1 December 2009 в 14:36
поделиться

6 ответов

Можно использовать .ToString() для получения String от StringBuilder.

110
ответ дан shA.t 2 December 2009 в 00:36
поделиться

Когда Вы говорите, что "это быстрее для конкатенации Строки со Строковым разработчиком", это только верно, если Вы неоднократно (я повторяюсь - неоднократно ), конкатенирующий к тому же объекту.

, Если Вы просто связываете 2 строки и делаете что-то с результатом сразу как string, нет никакого смысла к использованию StringBuilder.

я просто наткнулся на хорошую запись Jon Skeet этого: http://www.yoda.arachsys.com/csharp/stringbuilder.html

, Если Вы используете StringBuilder, затем для получения получающегося string, это - просто вопрос вызова ToString() (неудивительно).

13
ответ дан Michael Burr 2 December 2009 в 00:36
поделиться

После того как Вы завершили обработку с помощью StringBuilder, используйте метод ToString для возврата конечного результата.

Из MSDN:

using System;
using System.Text;

public sealed class App 
{
    static void Main() 
    {
        // Create a StringBuilder that expects to hold 50 characters.
        // Initialize the StringBuilder with "ABC".
        StringBuilder sb = new StringBuilder("ABC", 50);

        // Append three characters (D, E, and F) to the end of the StringBuilder.
        sb.Append(new char[] { 'D', 'E', 'F' });

        // Append a format string to the end of the StringBuilder.
        sb.AppendFormat("GHI{0}{1}", 'J', 'k');

        // Display the number of characters in the StringBuilder and its string.
        Console.WriteLine("{0} chars: {1}", sb.Length, sb.ToString());

        // Insert a string at the beginning of the StringBuilder.
        sb.Insert(0, "Alphabet: ");

        // Replace all lowercase k's with uppercase K's.
        sb.Replace('k', 'K');

        // Display the number of characters in the StringBuilder and its string.
        Console.WriteLine("{0} chars: {1}", sb.Length, sb.ToString());
    }
}

// This code produces the following output.
//
// 11 chars: ABCDEFGHIJk
// 21 chars: Alphabet: ABCDEFGHIJK
10
ответ дан BlackWasp 2 December 2009 в 00:36
поделиться

Об этом являющийся более быстрой/лучше памятью:

я изучил эту проблему с Java, я предполагаю, что.NET была бы так же умна об этом.

реализация для Строки является довольно впечатляющей.

Строковый объект отслеживает "длину" и "совместно использованный" (независимый от длины массива, который содержит строку)

, Таким образом, что-то как

String a = "abc" + "def" + "ghi";

может быть реализовано (компилятором/временем выполнения) как:

 - Extend the array holding "abc" by 6 additional spaces.
 - Copy def in right after abc 
 - copy ghi in after def. 
 - give a pointer to the "abc" string to a 
 - leave abc's length at 3, set a's length to 9
 - set the shared flag in both.

, Так как большинство строк является недолгим, это делает для некоторого ОЧЕНЬ эффективного кода во многих случаях. Случай, где это абсолютно НЕ эффективно, - когда Вы добавляете к строке в цикле, или когда Ваш код похож на это:

a = "abc";
a = a + "def";
a += "ghi";

В этом случае, Вы - очень более обеспеченное использование конструкции StringBuilder.

Моя точка - то, что необходимо быть осторожными каждый раз, когда Вы оптимизируете, если Вы не АБСОЛЮТНО уверены, что знаете то, что Вы делаете, И Вы абсолютно уверены, что это необходимо, И Вы тестируете, чтобы гарантировать, что оптимизированный код делает передачу варианта использования, просто кодируйте его самым читаемым возможным способом и не пытайтесь - думают компилятор.

я потратил впустую 3 дня, смешивая со строками, кэшируя/снова используя строковых разработчиков и скорость тестирования, прежде чем я посмотрел на строковый исходный код и выяснил, что компилятор уже делал его лучше, чем, я возможно мог для своего варианта использования. Затем я должен был объяснить, как я ДЕЙСТВИТЕЛЬНО не знал то, что я делал, я только думал, что сделал...

2
ответ дан rae1 2 December 2009 в 00:36
поделиться

Я был бы точно так же, как для вывода, который является, может не обязательно быстрее, это будет определенно иметь лучший объем потребляемой памяти. Это вызвано тем, что строка неизменна в.NET и каждый раз, когда Вы меняете струну, Вы создали новый.

3
ответ дан smaclell 2 December 2009 в 00:36
поделиться

Это не быстрее к concat - Как smaclell указанный, проблемой является неизменная строка, вызывающая дополнительное выделение и перекопировавшая существующих данных.

+ "b" + "c" не быстрее, чтобы сделать со строковым разработчиком, но повторил, что concats с промежуточной строкой становится быстрее и быстрее, как # concat's становится больше как:

x = "a"; x + = "b"; x + = "c";...

1
ответ дан Tony Lee 2 December 2009 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: