Чтение онлайн

на главную - закладки

Жанры

Визуальное программирование на Java Swing в NetBeans
Шрифт:

Кроме стандартного создания оператором 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";

String sub1 = s.substring(2,4); // совместно использует ту же память что и s

String sub2 = new String(s.substring(2,4)); // этот объект использует отдельный массив на 4 символа

Основные методы. Рассмотрим основные методы String:

– equals(Object anObject) – проверяет, идентична ли строка указанному объекту;

– compareTo(String anotherString) – лексиграфическое сравнение строк;

– compareToIgnoreCase(String str) – лексиграфическое сравнение строк без учета регистра символов;

– concat(String str) – возвращает соединение двух строк;

– contains(CharSequence s) – проверяет, входит ли указанная последовательность символов в строку;

– isEmpty – возвращает true, если длина строки равна 0;

– indexOf(String str) – поиск первого вхождения указанной подстроки;

– replace(CharSequence target, CharSequence replacement) – замена одной подстроки другой;

– substring(int beginIndex, int endIndex) – возвратить подстроку как строку;

– toLowerCase – преобразовать строку в нижний регистр;

– toUpperCase – преобразовать строку в верхний регистр;

– trim – отсечь на концах строки пустые символы;

– length – определение длины строки;

– valueOf(a) – статические методы преобразования различных типов в строку;

– charAt(int index) – возвращает символ по указанному индексу;

– regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) – тест на идентичность участков строк, можно указать учет регистра символов;

– regionMatches(int toffset, String other, int ooffset, int len) – тест на идентичность участков строк;

– endsWith(String suffix) – проверяет, завершается

ли строка указанным суффиксом;

– startsWith(String prefix) – проверяет, начинается ли строка с указанного префикса;

– startsWith(String prefix, int toffset) – проверяет, начинается ли строка в указанной позиции с указанного префикса;

– getBytes – возвращает байтовое представление строки;

– getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) – возвращает символьное представление участка строки;

– hashCode – хеш код строки;

– indexOf(int ch) – поиск первого вхождения символа в строке;

– indexOf(int ch, int fromIndex) – поиск первого вхождения символа в строке с указанной позиции;

– 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) – замена в строке одного символа на другой;

– toUpperCase(Locale locale) – преобразовать строку в верхний регистр, используя указанную локализацию;

– toLowerCase(Locale locale) – преобразовать строку в нижний регистр, используя указанную локализацию;

Методы поиска возвращают индекс вхождения или -1, если искомое не найдено. Методы преобразования (как replace) не изменяют саму строку, а возвращают соответствующий новый объект строки.

Особенности String. Неправильное использование типа String приводит к засорению оперативной памяти и как следствие к медленной работе программы. Рассмотрим пример:

public static void main(String[] args) {

String s = "a";

for (int i = 0; i < 100; i++) {

s += 'a';

}

System.out.println(s); // Распечатается строка из 100 символов «a»

}

Этот код создаст 100 разных строк, которые будут храниться в памяти, пока сборщик мусора Java не удалит их после завершения программы. В результате работы программы переменная «s» будет содержать строку из 100 символов «a», но 99 ранее созданных строк остались «мусором» в памяти без возможности обращения к ним.

Поэтому для изменения строки следует использовать класс обертку StringBuilder. Предыдущий пример нужно переписать следующим образом:

public static void main(String[] args) {

StringBuilder s = new StringBuilder("a");

for (int i = 0; i < 100; i++) {

s.append('a');

}

System.out.println(s); // Распечатается строка из 100 символов «a»

}

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

Поделиться:
Популярные книги

Тринадцатый

NikL
1. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
6.80
рейтинг книги
Тринадцатый

Барон отрицает правила

Ренгач Евгений
13. Закон сильного
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Барон отрицает правила

Газлайтер. Том 2

Володин Григорий
2. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 2

Гром над Академией. Часть 1

Машуков Тимур
2. Гром над миром
Фантастика:
фэнтези
боевая фантастика
5.25
рейтинг книги
Гром над Академией. Часть 1

Выйду замуж за спасателя

Рам Янка
1. Спасатели
Любовные романы:
современные любовные романы
7.00
рейтинг книги
Выйду замуж за спасателя

На границе империй. Том 10. Часть 5

INDIGO
23. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 5

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Моя простая курортная жизнь

Блум М.
1. Моя простая курортная жизнь
Проза:
современная проза
5.00
рейтинг книги
Моя простая курортная жизнь

Идеальный мир для Лекаря 21

Сапфир Олег
21. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 21

Мечник Вернувшийся 1000 лет спустя. Том 2

Ткачев Андрей Юрьевич
2. Вернувшийся мечник
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Мечник Вернувшийся 1000 лет спустя. Том 2

Играть... в тебя

Зайцева Мария
3. Звериные повадки Симоновых
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Играть... в тебя

В теле пацана

Павлов Игорь Васильевич
1. Великое плато Вита
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
В теле пацана

Кодекс Охотника. Книга VI

Винокуров Юрий
6. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга VI

Мусорщик

Поселягин Владимир Геннадьевич
3. Наемник
Фантастика:
боевая фантастика
космическая фантастика
8.55
рейтинг книги
Мусорщик