Spec-Zone .ru
спецификации, руководства, описания, API
|
StringBuilder
объекты походят String
Строки должны всегда использоваться, если строковые разработчики не предлагают преимущества с точки зрения более простого кода (см. пример программы в конце этого раздела), или лучшая производительность. Например, если Вы должны связать большое количество строк, добавляя к 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, за исключением того, что это ориентировано на многопотоковое исполнение на основании синхронизации его методов. Потоки будут обсуждены в уроке на параллелизме.