JavaRush /Java блог /Архив info.javarush /Справочник по java. Статические строки
articles
15 уровень

Справочник по java. Статические строки

Статья из группы Архив info.javarush
Строки в джава описываются классом String и являютя статическими, т.е. в существующей строке нельзя изменить символы и их колличество. Кроме стандартного создания оператором new, строки могут быть созданы напрямую из строковой литералы. При этом, в целях оптимизации, объекты созданные таким образом дополнительно сохраняются в отдельной области - строковый пул. String s1 = "d" // строка будет сохранена в пуле // строка не будет сохранена в пуле // будет уничтожена сборщиком мусора String s2 = new String("a"); Один из плюсов разделения строк на статические и динамические - повышение безопасности там, где строки используются в качестве аргументов (например, открытие баз данных, интернет соединений, механизм загрузки классов).

операция +

Для строк доступна операция +, позволяющая соединить несколько строк в одну. Если один из операндов не строка, то он автоматически преобразуется в строку. Для объектов в этих целях используется метод toString. При каждой операции внутренне используется объект динамической строки StringBuilder или StringBuffer. Поэтому для собирания строки из нескольких все равно оптимальней использовать сразу один StringBuilder/StringBuffer.

выделение подстроки

Есть замечание относительно метода substring - возвращаемая строка использует тот же байтовый массив, что и исходная. Например, вы загрузили строку А из файла в 1мб. Что-то там нашли и выделили в отдельную строку Б длиной в 3 символа. Строка Б в реальности тоже занимает те же 1мб. String s ="very .... long string from file"; // совместно использует ту же память что и s String sub1 = s.substring(2,4); // этот объект использует отдельный массив на 4 символа String sub2 = new String(s.substring(2,4));

основные методы

  • compareTo(String anotherString) - лексиграфическое сравнение строк;
  • compareToIgnoreCase(String str) - лексиграфическое сравнение строк без учета регистра символов;
  • regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) - тест на идентичность участков строк, можно указать учет регистра символов;
  • regionMatches(int toffset, String other, int ooffset, int len) - тест на идентичность участков строк;
  • concat(String str) - возвращает соединение двух строк;
  • contains(CharSequence s) - проверяет, входит ли указанная последовательность символов в строку;
  • endsWith(String suffix) - проверяет завершается ли строка указанным суффиксом;
  • startsWith(String prefix) - проверяет, начинается ли строка с указанного префикса;
  • startsWith(String prefix, int toffset) - проверяет, начинается ли строка в указанной позиции с указанного префикса;
  • equals(Object anObject) - проверяет идентична ли строка указанному объекту;
  • getBytes() - возвращает байтовое представление строки;
  • getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) - возвращает символьное представление участка строки;
  • hashCode() - хеш код строки;
  • indexOf(int ch) - поиск первого вхождения символа в строке;
  • indexOf(int ch, int fromIndex) - поиск первого вхождения символа в строке с указанной позиции;
  • indexOf(String str) - поиск первого вхождения указанной подстроки;
  • indexOf(String str, int fromIndex) - поиск первого вхождения указанной подстроки с указанной позиции;
  • lastIndexOf(int ch) - поиск последнего входения символа;
  • lastIndexOf(int ch, int fromIndex) - поиск последнего входения символа с указанной позиции;
  • lastIndexOf(String str) - поиск последнего вхождения строки;
  • lastIndexOf(String str, int fromIndex) - поиск последнего вхождения строки с указанной позиции;
  • replace(char oldChar, char newChar) - замена в строке одного символа на другой;
  • replace(CharSequence target, CharSequence replacement) - замена одной подстроки другой;
  • substring(int beginIndex, int endIndex) - возвратить подстроку как строку;
  • toLowerCase() - преобразовать строку в нижний регистр;
  • toLowerCase(Locale locale) - преобразовать строку в нижний регистр, используя указанную локализацию;
  • toUpperCase() - преобразовать строку в верхний регистр;
  • toUpperCase(Locale locale) - преобразовать строку в верхний регистр, используя указанную локализацию;
  • trim() - отсечь на концах строки пустые символы;
  • valueOf(a) - статические методы преобразования различных типов в строку.
Методы поиска возвращают индекс вхождения или -1 если искомое не найдено. Методы преобразования как replace не изменяют саму строку а возвращают соответствующий новый объект строки. методы с регулярными выражениями Строки также имеют ряд методов использующие регулярные выражения:
  • matches(String regex) - удовлетворяет ли строка указанному регулярному выражению;
  • replaceAll(String regex, String rplс) - заменяет все вхождения строк, удовлетворяющих регулярному выражению, указанной строкой;
  • replaceFirst(String regex, String rplс) - заменяет первое вхождение строки, удовлетворяющей регулярному выражению, указанной строкой;
  • split(String regex) - разбивает строку на части, границами разбиения являются вхождения строк, удовлетворяющих регулярному выражению;
  • split(String regex, int limit) - аналогично предыдущему, но с ограничением применения регулярного выражения к строке значением limit. Если limit>0, то и размер возвращаемого массива строк не будет больше limit. Если limit<=0, то регулярное выражение применяется к строке неограниченное число раз.
Ссылка на первоисточник: http://darkraha.com/rus/java/lang/string/static_string.php
Комментарии (6)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Mikhail Artyugin Уровень 18
17 января 2020
Очень не хватает примеров для понимания работы методов
ValeryRrR Уровень 23
10 августа 2018
Дмитрий Уровень 29
24 июля 2018
Что такое "вхождение строки"?
Skosh Уровень 17
6 июня 2018
"колличество" facepalm.jpg а так хорошая шпаргалка! спасибо :)
IgorBrest Уровень 33
26 апреля 2016
Есть замечание относительно метода substring — возвращаемая строка использует тот же байтовый массив, что и исходная. Например, вы загрузили строку А из файла в 1мб. Что-то там нашли и выделили в отдельную строку Б длиной в 3 символа. Строка Б в реальности тоже занимает те же 1мб.
а это правда?
ну т.е. на самом ли деле так?.. ни в документации, ни в исходниках я не нашел подтверждение этому (может вина этому мой не очень сильный английский). Исходники убедили меня как раз в обратном. Нет, я, конечно, могу ошибаться (и скорее всего так и есть)…
поэтому и спрашиваю… может наши гуру джавараша помогут разобраться ))
zibul444 Уровень 20
12 января 2016
Спасибо! Занятно, но хотелось бы немного более развернуто(или более человеческим языком) описание методов =*(