Все о строках в Java
Строки Java - это объекты, которые поддерживаются массивом символов и являются неизменяемыми. Класс java.lang.String используется для создания объекта String. Существует два способа создания объекта String:
- Использование строкового литерала
- Использование ключевого слова new
Использование строкового литерала
Строковый литерал создается с помощью двойных кавычек. Например:
String str = "Hello World!";
Каждый раз, когда вы создаете строковый литерал, JVM сначала проверяет пул строк. Если строка уже существует в пуле, возвращается ссылка на объединенный экземпляр. Если строка не существует в пуле, создается новый экземпляр String и помещается в пул.
String str1 = "Привет мир!";
String str2 = "Привет мир!";
// Это не создает новый экземпляр
В этом примере будет создан только один объект. Сначала JVM создаст новый объект со значением Привет мир!, а затем найдет строку с таким же значением в пуле и вернет ссылку на тот же экземпляр вместо создания нового.
Использование ключевого слова new
Когда вы используете ключевое слово new, в куче создается новый экземпляр строки, независимо от того, существует ли он уже в пуле строк.
String str1 = new String("Привет мир!");
String str2 = new String("Привет мир!");
В этом примере будут созданы два объекта и две ссылки на эти объекты.
Пул строк - это область хранения в кучной памяти Java, где создаются все остальные объекты. Это снижает нагрузку на память и повышает производительность за счет уменьшения количества строковых объектов, создаваемых в виртуальной машине Java. Каждый раз, когда создается строковый литерал, JVM сначала проверяет пул строк. Если строка уже существует в пуле, возвращается ссылка на объединенный экземпляр. Если строка не существует в пуле, создается новый экземпляр и помещается в пул.
Методы класса String
1. char charAt(int index): возвращает значение char для конкретного индекса
public class Example {
public static void main(String args[]) {
String name = "Вася";
char ch = name.charAt(4); // возвращает символ из 2-й позиции
System.out.println(ch);
}
}
Вывод:
с
2. int length(): возвращает длину строки
public class Example {
public static void main(String args[]){
String name="Вася";
System.out.println("Длина строки: "
+ name.length()); // Длина строки 4 символа
}
}
3. static String format(String format, Object… args) или static String format(Locale l, String format, Object… args): функция возвращает форматированную строку
Параметры String.format():
- locale: определяет языковой стандарт, который будет применяться к методу format().
- format: формат строки
- args: аргументы для форматированной строки. Их может быть ноль или больше
public class Example {
public static void main(String args[]) {
String name = "Вася";
String sf1 = String.format("Имя: %s", name);
String sf2 = String.format("Значение: %f", 32.33434);
String sf3 = String.format("Значение: %32.12f", 32.33434); // возвращает дробную часть из 12 символов, заполняемую нулями
System.out.println(sf1);
System.out.println(sf2);
System.out.println(sf3);
}
}
Вывод
Имя: Вася
Значение: 32.334340
Значение: 32.334340000000
Спецификаторы строкового формата Java
Ниже опубликовали таблицу спецификаторов формата, поддерживаемых Java String.
Преобразующий символ | Отображает аргумент как |
---|---|
%c | Одиночный символ |
%d | Число со знаком (int) |
%e | Дробь со знаком в научной нотации |
%f | Дробь со знаком (float) |
%g | Форматы из %e и %f, в зависимости от того, что короче |
%i | Аналогично %d |
%o | Число без знака в 8-ричной системе (int) |
%s | Строка текста |
%u | Целое число без знака (int) |
%x | Число без знака в 16-ричной системе (int) |
Спецификаторы строкового формата Java
public class Example2 {
public static void main(String[] args) {
String str1 = String.format("%d", 101); // Integer value
String str2 = String.format("%s", "Василий Петров"); // Строка
String str3 = String.format("%f", 101.00); // Дробь
String str4 = String.format("%x", 101); // 16-ричное значение
String str5 = String.format("%c", 'c'); // Символ
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
System.out.println(str5);
}
}
Вывод:
101
Василий Петров
101.000000
65
c
4. String substring(int beginIndex) или String substring(int beginIndex, int endIndex): возвращает подстроку с начальным индексом.
public class Example {
public static void main(String[] args) {
String s1="Василий Петров";
String substr = s1.substring(0); // Начинает с 0 и до конца
System.out.println(substr);
String substr2 = s1.substring(5,10); // Начинает с 5 и до 10
System.out.println(substr2);
}
}
Вывод:
Василий Петров
ий Пе
5. boolean contains(CharSequence s): возвращает значение true или false после сопоставления последовательности значений символов.
class ContainsExample {
public static void main(String args[]) {
String name="привет, как дела?";
System.out.println(name.contains("привет"));
System.out.println(name.contains("как"));
System.out.println(name.contains("Василий"));
}
}
Вывод:
true
true
false
6. static String join(CharSequence delimiter, CharSequence… elements) или static String join(CharSequence delimiter, Iterable extends CharSequence> elements): возвращает объединенную строку
public class Example {
public static void main(String args[]) {
String joinString1 = String.join("-", "Привет", "как", "дела");
System.out.println(joinString1);
String date = String.join("/", "31", "07", "2024");
System.out.print(date);
String time = String.join(":", "15", "20", "20");
System.out.println(" " + time);
}
}
Вывод:
Привет-как-дела31/07/2024 15:20:20
7. boolean equals(Object another): проверяет соответствие строки заданному объекту
public class Example {
public static void main(String args[]) {
String s1 = "Привет мир";
String s2 = "Привет мир";
String s3 = "ПРИВЕТ МИР";
String s4 = "java";
System.out.println("Вывод:");
System.out.println(s1.equals(s2)); // true, содержание и регистр совпадают
System.out.println(s1.equals(s3)); // false регистр не совпадает
System.out.println(s1.equals(s4)); // false содержание разное
}
}
Вывод:
Вывод:
true
false
false
8. boolean isEmpty(): проверяет, является ли строка пустой
public class Example {
public static void main(String args[]) {
String s1="";
String s2="Василий Петров";
System.out.println(s1.isEmpty());
System.out.println(s2.isEmpty());
}
}
Вывод:
true
false
Пустые и Null строки
Ранее в этом руководстве мы обсуждали, что пустые строки содержат нулевые символы. Однако то же самое верно и для null строки. null строка - это строка, которая не имеет значения.
String str = ""; // Пустая строка
String str1 = null; // null строка. Также не содержит символов.
Метод isEmpty() не подходит для проверки нулевых строк.
9. String concat(String str): объединяет указанную строку
public class Example {
public static void main(String args[]){
String s1="Привет"; // Строка s1 не изменяется, даже если
// для нее вызывается метод concat(), поскольку она неизменяема.
// Поэтому здесь требуется явное присвоение s1.concat()
System.out.println(s1);
s1=s1.concat(" мир");
System.out.println(s1);
}
}
Вывод:
Привет
Привет мир
10. String replace(char old, char new): заменяет все вхождения указанной последовательности символов.
String replace(CharSequence old, CharSequence new): заменяет все вхождения указанной последовательности символов.
String replace(char old, char new) метод:
public class Example1 {
public static void main(String args[]) {
String s1 = "java is a popular programming language";
String replaceString = s1.replace('a', 'e');
// Заменить все последовательности 'a' на 'e'
System.out.println(replaceString);
}
}
Вывод:
jeve is e populer progremming lenguege
String replace(CharSequence target, CharSequence replacement) метод:
public class Example2 {
public static void main(String args[]) {
String s1="Привет мир программирования";
String replaceString=s1.replace("мир","пир"); // заменяет все последовательности "мир" на "пир"
System.out.println(replaceString);
}
}
Вывод:
Привет пир программирования
11. static String equalsIgnoreCase(String another): сравнивает другую строку. Регистр не проверяется
public class Example {
public static void main(String args[]) {
String s1 = "Василий";
String s2 = "Василий";
String s3 = "ВАСИЛИЙ";
String s4 = "java";
System.out.println(s1.equalsIgnoreCase(s2)); //true контент и регистр совпадает
System.out.println(s1.equalsIgnoreCase(s3)); //true игнорируем регистр
System.out.println(s1.equalsIgnoreCase(s4)); //false контент другой
}
}
12. String[] split(String regex): возвращает разделенную строку, соответствующую регулярному выражению
String[] split(String regex, int limit): возвращает разделенную строку, соответствующую регулярному выражению с указанным лимитом
public class Example {
public static void main(String args[]) {
String s1 = "Ах этот прекрасный мир на Java";
String[] words = s1.split("\\s"); // разделяет строку по пробелам
// используя цикл foreach выведем элементы
for(String w:words) {
System.out.println(w);
}
}
}
Вывод:
Ах
этот
прекрасный
мир
на
Java
Второй пример:
public class Example2 {
public static void main(String args[]) {
String s1 = "Ах этот прекрасный мир";
System.out.println("Возращаемые слова:");
for(String w:s1.split("\\s", 0)){
System.out.println(w);
}
System.out.println("----------------");
System.out.println("Возращаемые слова:");
for(String w:s1.split("\\s", 1)) {
System.out.println(w);
}
System.out.println("----------------");
System.out.println("Возращаемые слова:");
for(String w:s1.split("\\s", 2)){
System.out.println(w);
}
}
}
Вывод:
Возращаемые слова:
Ах
этот
прекрасный
мир
----------------
Возращаемые слова:
Ах этот прекрасный мир
----------------
Возращаемые слова:
Ах
этот прекрасный мир
13. String intern(): возвращает интернированную строку
public class InternExample {
public static void main(String args[]) {
String name1 = new String("Вася");
String name2 = "Вася";
String name3 = name1.intern(); // возвращает строку из пула,
// сейчас она будет такая же как s2
System.out.println(name1 == name2); // false так как связанные переменные указывают на другие экземпляры
System.out.println(name2 == name3); // true так как связанные переменные указывают на теже экземпляры
}
}
Вывод:
false
true
14. int indexOf(int ch): возвращает указанный индекс значения символа.
int indexOf(int ch, int fromIndex): возвращает указанное значение char index, начинающееся с заданного индекса
int indexOf(String substring): возвращает указанный индекс подстроки
int indexOf(String substring, int fromIndex): возвращает указанный индекс подстроки, начинающийся с заданного индекса
Пример int indexOf(int ch)
public class Example1 {
public static void main(String args[]) {
String s1 = "Привет мир";
// passing char value
int index4 = s1.indexOf('и'); // возвращает индекс символа "и"
System.out.println(index4); // 2
}
}
Пример String indexOf(int char, int fromIndex)
public class Example2 {
public static void main(String[] args) {
String s1 = "Привет мир";
// Передаем символ и стартовую позицию поиска
int index = s1.indexOf('и', 5); // Возвращает индекс символа
System.out.println("Позиция символа: " + index);
}
}
Вывод
Позиция символа: 8
Пример метода String indexOf(String substring)
public class Example3 {
public static void main(String[] args) {
String s1 = "Пример работы метода indexOf";
// Передаем подстроку
int index = s1.indexOf("метод"); // возвращает индекс подстроки
System.out.println("Позиция в подстроке " + index);
}
}
Вывод
Позиция в подстроке 14
Пример метода String indexOf(String substring, int fromIndex)
public class Example4 {
public static void main(String[] args) {
String s1 = "Пример работы метода indexOf";
// Передаем подстроку и индекс
int index = s1.indexOf("метод", 10); // возвращает индекс подстроки
System.out.println("Позиция в подстроке " + index);
index = s1.indexOf("метод", 20); // возвращает -1 если подстрока не найдена
System.out.println("Позиция в подстроке " + index);
}
}
Вывод:
Позиция в подстроке 14
Позиция в подстроке -1
15. String toLowerCase(): возвращает строку в нижнем регистре
public class Example {
public static void main(String args[]) {
String s1 = "Привет МИР!";
String s1lower = s1.toLowerCase();
System.out.println(s1lower);
}
}
Вывод:
привет мир!
16. String toLowerCase(Locale l): возвращает строку в нижнем регистре с использованием указанной локали.
import java.util.Locale;
public class StringLowerExample2 {
public static void main(String[] args) {
String s = "Have a NICE DAY!";
String eng = s.toLowerCase(Locale.ENGLISH);
System.out.println(eng);
String turkish = s.toLowerCase(Locale.forLanguageTag("tr")); // отобразит i без точки
System.out.println(turkish);
}
}
Вывод:
have a nice day!
have a nıce day!
17. String toUpperCase(): возвращает строку в верхнем регистре
public class Example {
public static void main(String args[]) {
String s1 = "Привет Вася";
String s1upper = s1.toUpperCase();
System.out.println(s1upper);
}
}
Вывод:
ПРИВЕТ ВАСЯ
18. String toUpperCase(Locale l): возвращает строку в верхнем регистре с использованием указанной локали.
import java.util.Locale;
public class Example {
public static void main(String[] args) {
String s = "have a nice day";
String turkish = s.toUpperCase(Locale.forLanguageTag("tr"));
String english = s.toUpperCase(Locale.forLanguageTag("en"));
System.out.println(turkish); // Выводит i в верхнем регистре с точкой
System.out.println(english);
}
}
Вывод:
HAVE A NİCE DAY
HAVE A NICE DAY
19. String trim(): удаляет начальные и конечные пробелы из этой строки
public class Example {
public static void main(String args[]) {
String s1 = " привет мир ";
System.out.println(s1 + "!"); // без trim()
System.out.println(s1.trim() + "!");// с trim()
}
}
Вывод:
привет мир !
привет мир!
20. static String valueOf(int value): преобразует заданный тип в строку. Это перегрузка метода.
public class Example {
public static void main(String args[]) {
int value = 30;
String s1 = String.valueOf(value);
System.out.println(s1 + 10); // объединяет строку с 10
}
}
Вывод:
3010
Экранирующий символ в строках Java
Управляющие (escape) последовательности используются для обозначения альтернативной интерпретации последовательности символов. В Java символ, которому предшествует обратная косая черта \, является управляющей последовательностью.
Компилятор Java воспринимает escape-последовательность как один символ, имеющий особое значение.
Escape последовательность | Описание |
---|---|
\t | Символ табуляции |
\b | Удаляющий символ (backspace) |
\n | Символ новой строки |
\r | Символ возврата каретки |
\f | Смена страницы |
\' | Символ одинарных кавычек |
\" | Символ двойных кавычек |
\\ | Символ обратного слеша |
Управляющая последовательность
public class EscapeCharaterExample {
public static void main(String args[]) {
// Вставка табуляции
String str = "Василий\tПетров";
System.out.println(str);
System.out.println("---------------");
// Перенос строки
String str1 = "Привет мир\nпрограммирования \nна \nязыке Java";
System.out.println(str1);
System.out.println("---------------");
// Вставка обратного слеша
String str2 = "Да\\Нет";
System.out.println(str2);
System.out.println("---------------");
// Вставка символа возврата каретки
String str3 = "Возврат\rКаретки";
System.out.println(str3);
System.out.println("---------------");
// Выводит одинарную кавычку
String str4 = "Wall Street\'s";
System.out.println(str4);
System.out.println("---------------");
// Выводит двойные кавычки
String str5 = "\"Василий\"";
System.out.println(str5);
}
}
Вывод:
Василий Петров
---------------
Привет мир
программирования
на
языке Java
---------------
Да\Нет
---------------
Возврат
Каретки
---------------
Wall Street's
---------------
"Василий"
Комментарии
Для того чтобы оставить свое мнение, необходимо зарегистрироваться на сайте