Spec-Zone .ru
спецификации, руководства, описания, API
След: Изучение Языка Java
Урок: Числа и Строки
Раздел: Строки
Класс StringBuilder
Домашняя страница > Изучение Языка Java > Числа и Строки

Класс StringBuilder

StringBuilder объекты походят String объекты, за исключением того, что они могут быть изменены. Внутренне, эти объекты обрабатываются как массивы переменной длины, которые содержат последовательность символов. В любой точке длина и контент последовательности могут быть изменены посредством вызовов метода.

Строки должны всегда использоваться, если строковые разработчики не предлагают преимущества с точки зрения более простого кода (см. пример программы в конце этого раздела), или лучшая производительность. Например, если Вы должны связать большое количество строк, добавляя к a StringBuilder объект более эффективен.

Длина и Емкость

StringBuilder class, как String class, имеет a length() метод, который возвращает длину символьной последовательности в разработчике.

В отличие от строк, у каждого строкового разработчика также есть емкость, число символьных мест, которые были выделены. Емкость, которая возвращается capacity() метод, всегда больше чем или равен длине (обычно больше чем) и автоматически расширится по мере необходимости, чтобы разместить дополнения к строковому разработчику.

StringBuilder Конструкторы
Конструктор Описание
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(). Когда это происходит, емкость автоматически увеличивается.

Операции StringBuilder

Основные операции на a StringBuilder это не доступно в String append() и insert() методы, которые перегружаются, чтобы принять данные любого типа. Каждый преобразовывает его параметр строке и затем добавляет или вставляет символы той строки к символьной последовательности в строковом разработчике. Добавлять метод всегда добавляет эти символы в конце существующей символьной последовательности, в то время как метод вставки добавляет символы в указанной точке.

Вот много методов StringBuilder class.

Различный StringBuilder Методы
Метод Описание
StringBuilder append(boolean b)
StringBuilder append(char c)
StringBuilder append(char[] str)
StringBuilder append(char[] str, int offset, int len)
StringBuilder append(double d)
StringBuilder append(float f)
StringBuilder append(int i)
StringBuilder append(long lng)
StringBuilder append(Object obj)
StringBuilder append(String s)
Добавляет параметр этому строковому разработчику. Данные преобразовываются в строку прежде, чем добавлять работа будет иметь место.
StringBuilder delete(int start, int end)
StringBuilder deleteCharAt(int index)
Первый метод удаляет подпоследовательность из запуска, чтобы закончиться 1 (включительно) в StringBuilder's последовательность случайной работы. Второй метод удаляет символ, расположенный в index.
StringBuilder insert(int offset, boolean b)
StringBuilder insert(int offset, char c)
StringBuilder insert(int offset, char[] str)
StringBuilder insert(int index, char[] str, int offset, int len)
StringBuilder insert(int offset, double d)
StringBuilder insert(int offset, float f)
StringBuilder insert(int offset, int i)
StringBuilder insert(int offset, long lng)
StringBuilder insert(int offset, Object obj)
StringBuilder insert(int offset, String s)
Вставляет второй параметр в строкового разработчика. Первый целочисленный параметр указывает на индексирование, перед которым должны быть вставлены данные. Данные преобразовываются в строку прежде, чем работа вставки будет иметь место.
StringBuilder replace(int start, int end, String s)
void setCharAt(int index, char c)
Заменяет указанный символ (ы) в этом строковом разработчике.
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() вызов.


Отметьте: есть также a StringBuffer class, который является точно тем же самым как StringBuilder class, за исключением того, что это ориентировано на многопотоковое исполнение на основании синхронизации его методов. Потоки будут обсуждены в уроке на параллелизме.

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Сравнение Строк и Частей Строк
Следующая страница: Сводка Символов и Строк