– 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 более медленный, но потокобезопасный. Переменные типа динамических строк могут менять свои значения и длину во время выполнения программы.
Основные методы динамических строк:
– append(A) – преобразовать A в строку и добавить в конец;
– insert(int offset, A) – преобразовать A в строку и вставить ее в указанную позицию;
– delete(int start, int end) – удалить символы с указанной начальной позиции по указанную конечную позицию;
– reverse() – расположить символы в обратном порядке;
– setCharAt(int index, char ch) – заменить символ в указанной позиции;
– setLength(int newLength) – установить новый размер строки;
– substring(int start) – вернуть подстроку с указанной позиции и до конца как строку;
– substring(int start, int end) – вернуть подстроку как строку;
– deleteCharAt(int index) – удалить символ в указанной позиции;
– getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) – сохранить последовательность символов в массив;
– indexOf(String str) – поиск первого вхождения подстроки;
– indexOf(String str, int fromIndex) – поиск первого вхождения подстроки с указанной позиции;
– lastIndexOf(String str) – поиск последнего вхождения подстроки;
– lastIndexOf(String str, int fromIndex) – поиск последнего вхождения подстроки с указанной позиции;
– replace(int start, int end, String str) – замена участка строки указанной строкой.
Пример преобразования строк. В этом примере массив символов и целое число преобразуются в объекты типа String с использованием методов этого класса:
package tsn01.string;
public class TSN01_String {
public static void main(String[] args) {
char s[] = {'J', 'a', 'v', 'a'}; // Массив символов
String str = new String(s); // str="Java"
if (!str.isEmpty()) {
int i = str.length(); // i=4
str = str.toUpperCase(); // str="JAVA"
String num = String.valueOf(6); // num="6"
num = str.concat("-" + num); // num="JAVA-6"
char ch = str.charAt(2); // ch='V'