Bazaprogram.ru

Новости из мира ПК
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java string append

Классы StringBuffer и StringBuilder

Класс String представляет собой неизменяемые последовательности символов постоянной длины и частое использование объектов класса занимают много места в памяти. Класс StringBuffer представляет расширяемые и доступные для изменений последовательности символов, позволяя вставлять символы и подстроки в существующую строку и в любом месте. Данный класс гораздо экономичнее в плане потребления памяти и настоятельно рекомендуется к использованию.

Существует четыре конструктора класса:

  1. StringBuffer() — резервирует место под 16 символов без перераспределения памяти
  2. StringBuffer(int capacity) — явно устанавливает размер буфера
  3. StringBuffer(String string) — устанавливает начальное содержимое и резервирует 16 символов без повторого резервирования
  4. StringBuffer(CharSequence cs) — создаёт объект, содержащий последовательность символов и резервирует место ещё под 16 символов

Методы класса StringBuffer

length()

Метод позволяет получить текущую длину объекта.

capacity()

Метод позволяет получить текущий объём выделенной памяти.

Обратите внимание, что хотя слово состоит из четырёх символов, в памяти выделено запасное пространство для дополнительных 16 символов. Для такой простейшей операции выигрыша нет, но в сложных примерах, когда приходится на лету соединять множество строк, производительность резко возрастает.

ensureCapacity()

Можно предварительно выделить место для определённого количества символов, если собираетесь добавлять большое количество маленьких строк.

setLength(int length)

Устанавливает длину строки. Значение должно быть неотрицательным.

charAt(int index) и setCharAt(int index, char ch)

Можно извлечь значение отдельного символа с помощью метода charAt() и установить новое значение символа с помощью метода setCharAt(), указав индекс символа и его значение.

getChars()

Позволяет скопировать подстроку из объекта класса StringBuffer в массив. Необходимо позаботиться, чтобы массив был достаточного размера для приёма нужного количества символов указанной подстроки.

append()

Метод соединяет представление любого другого типа данных. Есть несколько перегруженных версий.

Строковое представление каждого параметра за кулисами получают через метод String.valueOf() и затем полученные строки склеиваются в итоговую строку.

insert()

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

reverse()

Позволяет изменить порядок символов на обратный.

У меня получилось практически то же самое, может метод глючит?

delete() и deleteCharAt()

Метод delete() удаляет последовательность символов, вам надо задать индекс первого символа, который надо удалить, а также индекс символа, следующего за последним из удаляемых. Метод deleteCharAt() удаляет один символ из указанной позиции.

replace()

Позволяет заменить один набор символов на другой. Нужно указать начальный и конечный индекс и строку замены.

substring()

Позволяет получить часть содержимого. Есть две формы метода. В первом случае нужно указать индекс начала позиции, с которой нужно получить подстроку. Во втором варианте указывается начальный индекс и конечный индекс, если нужно получить текст из середины строки.

Есть и другие методы

StringBuilder

Класс StringBuilder идентичен классу StringBuffer и обладает большей производительностью. Однако он не синхронизирован, поэтому его не нужно использовать в тех случаях, когда к изменяемой строке обращаются несколько потоков.

Создадим новый объект.

Добавляем новый фрагмент в существующую строку:

Соединять строки можно цепочкой.

Данный код работает чуть быстрее, чем вызов append() по отдельности. Но это будет заметно при очень больших объёмах.

ez code

Просто о сложном.

Управление строками, функции для работы со строками в Java. Часть 2

Продолжаем изучение строк в Java. Основы работы со строками можно посмотреть в уроке «Строки в Java».

Методы для сравнения строк

Класс String содержит методы для сравнения строк и частей строк. Следующая таблица описывает эти методы:

МетодОписание
boolean endsWith(String suffix)
boolean startsWith(String prefix)
Возвращает true Если строка заканчивается или начинается с указанной подстроки.
boolean startsWith(String prefix, int offset)Возвращается true если переданная строка входит в исходную начиная с индекса offset.
int compareTo(String anotherString)Сравнивает строки лексикографически. Возвращает int:> 0, если строка болше переданной в параметре, = 0, если равны и StringBuilder отличаются от объектов типа String тем, что они могут быть изменены. По сути они представляют из себя массивы переменной длины, содержащие последовательность символов. Длина и содержание последовательности могут быть изменены вызовом соответствующих методов.

StringBuilder необходимо использовать в случаях, когда это поможет упростить код (пример ниже) или если это необходимо для лучшей производительности. Если вам необходимо объединить большое количество строк, использование StringBuilder будет более эффективным.

Length и Capacity

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

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

StringBuilder()
Создает пустой stringbuilder, с емкостью 16 символов.
StringBuilder(CharSequence cs)Создает stringbuilder, содержащий заданную последовательность символов плюс дополнительно 16 пустых символов.
StringBuilder(int initCapacity)Создает stringbuilder определенной емкости.
StringBuilder(String s)Создет stringbuilder с заданной строкой.

Например, следующий код:

создаст string builder длиной 9 символов и емкостью 16:

StringBuilder Java

Класс StringBuilder содержит несколько методов относящихся к длине и емкости, которых нет в классе String :

Length и Capacity функции

ФункцияОписание
void setLength(int newLength)Задает длину последовательности символов. Если newLength меньше length() , последние символы будут отсечены. Если newLength больше length() , будут добавлены null-символы в конец последовательности.
void ensureCapacity(int minCapacity)Гарантирует, что емкость будет не меньше указанного минимума.

Некоторые операции (например, append() , insert() , или setLength() ) могут увеличить длину последовательности символов в stringbuilder’е , так что длина может оказаться больше текущей емкости. Когда это происходит — емкость автоматически увеличивается.

Функции StringBuilder

Основные функции StringBuilder , которых нет в String : append() и insert() , которые перегружены для приема разного типа данных. Каждый конвертирует аргумент в строку и добавляет её в строку stringbuilder’а. Метод append всегда добавляет символы в конец существующей последовательности, тогда как метод insert добавляет символы в указанное место.

Некоторые методы класса StringBuilder .

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’а. Предварительно данные конвертируются в строку.
StringBuilder delete(int start, int end)
StringBuilder deleteCharAt(int index)
Первый метод удаляет подпоследовательность начиная с from до end-1 (включительно) в последовательности символов StringBuilder ‘а. Второй — удаляет символ, индекс которого равен 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. Первый аргумент задает позицию символа перед которым будет вставлены данные. Перед вставкой данные конвертируются в строку.
StringBuilder replace(int start, int end, String s)
void setCharAt(int index, char c)
Заменяет заданные символы в строке.
StringBuilder reverse()Переворачивает строку в stringbuilder’е.
String toString()Возвращает строку, которая хранится в билдере.

Вы можете использовать любой метод класса String на объекте класса StringBuilder предварительно сконвертировав его в строку методом toString() . Затем из строки можно опять сделать stringbuilder, используя конструктор: StringBuilder(String str) .

Пример

Программа StringDemo, которую мы рассматривали в предыдущих уроках Java — пример того, когда использование StringBuilder вместо String делает программу проще.

StringDemo переворачивает палиндром:

Для того чтобы перевернуть сроку программа сначала конвертирует строку в массив символов (первый цикл), далее переворачивает массив и обратно конвертирует массив в строку.

Если вы конвертируете строку palindrome в stringbuilder, вы сможете использовать метод reverse() класса StringBuilder . Код станет чище и проще читаемым:

Обратите внимание, что в функцию println() мы передаем StringBuilder:

Java string append

Most String manipulation problems requires us to come up with combination of information and summarize into one String. For example, imagine we wish to convert an integer value into words as String, this will require us to combine multiple Strings to come up with an answer String. What is common to this is we need to append one String to another, to form a closer form to the answer. Below we explore how to do String Append in Java.

Java String Append Using Plus Operator

The most common way in Java on how to Append String, is by using the plus operator (+). Plus is natively supported which means combine the two String to the left and right of the plus sign, to form a new String of combined contents. Here is a simple example:

This will comebine the firstName which is John, with the lastName which is Doe, because plus is in the middle of the two variables. Hence, this code will output:

We can use literal Strings and not only variable. Below is a simple example on how to use literal String to do String Append in Java.
This appends the contents of the variable firstName, which contains the value Jane, with the literal String Doe. The result is JaneDoe which is the expected output below»

We can also use the plus operator multiple times in a statement. Below is an example using three items appended together:

The code above combines the contents of the variable firstName, which have the alue John, with the literal dash and spaces. The result is then again appended to the contents of variable lastName, which contains the value Doe. The resulting String should be «John — Doe», hence the output is shown below:

Java String Append Using StringBuilder

Back in the older versions of Java, using plus operator is inefficient because multiple Strings are created on the fly. Developers typically use StringBuilder as a more efficient method of appending String in Java. Because using StringBuilder is guaranteed not to create unnecessary instances of String. We can feel this when we write a program that handles hundreds if thousands of operations, hence this is very important point to note. In more recent versions of Java, using plus operator uses StringBuilder behind the scenes, and it is not as inefficient as we once believed. Below is a simple example on how to use StringBuilder for Java String Append operations.

As you could see, the above code is longer compared to when we use the plus operator in appending together multiple Strings. But the result should be the same as shown below:

Initially, the StringBuilder is empty, then the value of firstName was appended. And then the value of the lastName was appended next. Hence the same result is achieved. Below is another example with String literal used in StringBuilder to append Strings together in Java.
We can append together String variables and String literals. Below is the expected output of the above code with StringBuilder.

Below is another example where we appended together more items.

As expected, below is the expected output:

Java String Append Using StringBuffer

Why is there StringBuilder and StringBuffer? They feel very similar when used. The difference is that StringBuffer is thread safe and synchronized. But StringBuilder is not thread safe and not synchronized. So why is this important? Why not use StringBuffer always for safety? Because synchronization of StringBuffer comes with a price — it is much slower to use than StringBuilder. StringBuilder is very efficient and fast because it doesn’t need to do a lot to ensure thread safety. The performance difference is huge. So what do we do? If we are sure that no threads will share the data structure, use StringBuilder for performance. But if thread safety is important, consider using StringBuffer. The usage is very similar, and we show below a converted example from an example above:

As expected, below is the expected output:

Строки в Java: String, StringBuilder, StringBuffer

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

На практике Вы будете больше работать и встречать объект String, как один из самых удобный и наиболее применяемых объектов для работы со строковыми переменными в джава. Именно его функционал мы сегодня и рассмотрим.

Класс String — основной класс представляющий строки

Мы уже создавали строковые переменные и тогда я просил Вас поверить мне на слово и просто писать что-то вроде: String hello = «Hello world». Это и есть первый способ создать строковую переменную. Второй способ — это создать строку как мы создаем экземпляр класса, новые объекты через ключевое слово new. String hello = new String(«Hello world»). Различия в способах более существенны, чем кажутся на первый взгляд. Для того чтобы понять их нужно немного узнать о распределении памяти.

В языке Java объекты хранятся в куче (heap), а примитивные типы и ссылки на объекты в стеке (stack). Но есть еще такой механизм как пул (pool). Это механизм, если можно так назвать, сохранения строковых переменных для экономии места в памяти. Я нарисовал примерную схему. И попытаюсь объяснить по ней:

Выглядит не очень. Я знаю.

Когда мы создаем строку через ключевое слово new, тогда создается одна строка в пуле и в куче. Если строка создается без ключевого слова new, вот таким образом: String hello = «Hello world» — тогда она создается только в пуле. Если так создать точно такую же строку, новый объект не создается, а две переменные ссылаются на один объект в пуле. Такой механизм пула есть только в объекта String и классов-оберток для примитивных типов (о них мы еще поговорим).

Заметьте, как работает память с другими объектами. На примере объекта Cat видно, что при создании нового объекта с той же самой ссылкой, старый объект уничтожается сборщиком мусора — это специальный механизм в Java, задача которого освобождать память от ненужных объектов (тех на которые потеряна ссылка).

Основные методы строк

Теперь что касается методов со строками. Класс String в этом плане имеет множество полезных методов; наиболее полезные и часто используемые мы сейчас разберем.

  1. lengtn() — возвращает длину строки;
  2. charAt(int number) — возвращает символ по указанному индексу. Отсчет идет с 0;
  3. indexOf(char sumbol) — возвращает индекс по указанному символу. Если символа не найдено возвращается -1;
  4. substring(int startIndex) — возвращает подстроку строки начиная с указанного индекса;
  5. substring(int startIndex, int endIndex) — возвращает подстроку строки начиная с указанного индекса и заканчивая указанным индексом;
  6. startsWith(String sumbolOrSumbols) — возвращает true если строка начинается с указанного слова или символа;
  7. toLowerCase() — переводит строку в нижний регистр;
  8. toUpperCase() — переводит строку в верхний регистр;
  9. replaceAll(String partWhichReplace, String partOnWhichReplace) — заменяет часть строки на заменяемую строку
  10. equals(String strToCompare) — сравнение строк. Данный метод используется для сравнения объектов не по ссылке, а по содержанию;
  11. equalsIgnoreCase(String strToCompare) — сравнение без учета регистра;
  12. trim() — убирает пробелы в конце и в начале строки (если есть);
  13. toCharArray() — разбивает строку на массив char;
  14. split(String reqexp) — разбивает строку по заданному символу.
Читать еще:  Math abs javascript
Ссылка на основную публикацию
Adblock
detector