|
Spec-Zone .ru
спецификации, руководства, описания, API
|
StringBuilder объекты походят объекты, за исключением того, что они могут быть изменены. Внутренне, эти объекты обрабатываются как массивы переменной длины, которые содержат последовательность символов. В любой точке длина и контент последовательности могут быть изменены посредством вызовов метода.
Строки должны всегда использоваться, если строковые разработчики не предлагают преимущества с точки зрения более простого кода (см. пример программы в конце этого раздела), или лучшая производительность. Например, если Вы должны связать большое количество строк, добавляя к a StringBuilder объект более эффективен.
StringBuilder class, как String class, имеет a length() метод, который возвращает длину символьной последовательности в разработчике.
В отличие от строк, у каждого строкового разработчика также есть емкость, число символьных мест, которые были выделены. Емкость, которая возвращается capacity() метод, всегда больше чем или равен длине (обычно больше чем) и автоматически расширится по мере необходимости, чтобы разместить дополнения к строковому разработчику.
| Конструктор | Описание |
|---|---|
StringBuilder() |
Создает пустого строкового разработчика с емкостью 16 (16 пустых элементов). |
StringBuilder(CharSequence cs) |
Создает строкового разработчика, содержащего те же самые символы как указанное CharSequence, плюс дополнительные 16 пустые элементы, запаздывающие CharSequence. |
StringBuilder(int initCapacity) |
Создает пустого строкового разработчика с указанной начальной емкостью. |
StringBuilder(String s) |
Создает строкового разработчика, значение которого инициализируется указанной строкой плюс дополнительные 16 пустые элементы, запаздывающие строка. |
Например, следующий код
// creates empty builder, capacity 16
StringBuilder sb = new StringBuilder();
// adds 9 character string at beginning
sb.append("Greetings");
произведет строкового разработчика с длиной 9 и емкостью 16:

StringBuilder У class есть некоторые методы, связанные с длиной и емкостью что String class не имеет:
| Метод | Описание |
|---|---|
void setLength(int newLength) |
Устанавливает длину символьной последовательности. Если newLength меньше чем length(), последние знаки в символьной последовательности являются усеченными. Если newLength больше чем length(), нулевые символы добавляются в конце символьной последовательности. |
void ensureCapacity(int minCapacity) |
Гарантирует, что емкость, по крайней мере, равна указанному минимуму. |
Много операций (например, append(), insert(), или setLength()) может увеличить длину символьной последовательности в строковом разработчике так, чтобы результант length() было бы больше чем ток capacity(). Когда это происходит, емкость автоматически увеличивается.
Основные операции на a StringBuilder это не доступно в String append() и insert() методы, которые перегружаются, чтобы принять данные любого типа. Каждый преобразовывает его параметр строке и затем добавляет или вставляет символы той строки к символьной последовательности в строковом разработчике. Добавлять метод всегда добавляет эти символы в конце существующей символьной последовательности, в то время как метод вставки добавляет символы в указанной точке.
Вот много методов StringBuilder class.
| Метод | Описание |
|---|---|
StringBuilder append(boolean b) |
Добавляет параметр этому строковому разработчику. Данные преобразовываются в строку прежде, чем добавлять работа будет иметь место. |
StringBuilder delete(int start, int end) |
Первый метод удаляет подпоследовательность из запуска, чтобы закончиться 1 (включительно) в StringBuilder's последовательность случайной работы. Второй метод удаляет символ, расположенный в index. |
StringBuilder insert(int offset, boolean b) |
Вставляет второй параметр в строкового разработчика. Первый целочисленный параметр указывает на индексирование, перед которым должны быть вставлены данные. Данные преобразовываются в строку прежде, чем работа вставки будет иметь место. |
StringBuilder replace(int start, int end, String s) |
Заменяет указанный символ (ы) в этом строковом разработчике. |
StringBuilder reverse() |
Инвертирует последовательность символов в этом строковом разработчике. |
String toString() |
Возвращает строку, которая содержит символьную последовательность в разработчике. |
String метод на a StringBuilder объект первым преобразованием строкового разработчика к строке с toString() метод StringBuilder class. Затем преобразуйте строку назад в строкового разработчика, использующего StringBuilder(String str) конструктор. StringDemo программа, которая была перечислена в разделе, названном "Строки", является примером программы, которая была бы более эффективной если a StringBuilder использовались вместо a String.
StringDemo инвертированный палиндром. Здесь, еще раз, его перечисление:
public class StringDemo {
public static void main(String[] args) {
String palindrome = "Dot saw I was Tod";
int len = palindrome.length();
char[] tempCharArray = new char[len];
char[] charArray = new char[len];
// put original string in an
// array of chars
for (int i = 0; i < len; i++) {
tempCharArray[i] =
palindrome.charAt(i);
}
// reverse array of chars
for (int j = 0; j < len; j++) {
charArray[j] =
tempCharArray[len - 1 - j];
}
String reversePalindrome =
new String(charArray);
System.out.println(reversePalindrome);
}
}
Выполнение программы производит этот вывод:
doT saw I was toD
Чтобы выполнить строковое реверсирование, программа преобразовывает строку в массив символов (сначала for цикл), инвертирует массив во второй массив (второй for цикл), и затем преобразовывает назад в строку.
Если Вы преобразовываете palindrome представьте в виде строки строковому разработчику, можно использовать reverse() метод в StringBuilder class. Это делает код более простым и легче читать:
public class StringBuilderDemo {
public static void main(String[] args) {
String palindrome = "Dot saw I was Tod";
StringBuilder sb = new StringBuilder(palindrome);
sb.reverse(); // reverse it
System.out.println(sb);
}
}
Выполнение этой программы производит тот же самый вывод:
doT saw I was toD
Отметьте это println() печатает строкового разработчика, как в:
System.out.println(sb);
потому что sb.toString() вызывается неявно, как это с любым другим объектом в a println() вызов.
StringBuffer class, который является точно тем же самым как StringBuilder class, за исключением того, что это ориентировано на многопотоковое исполнение на основании синхронизации его методов. Потоки будут обсуждены в уроке на параллелизме.