popov . dev

Main

Library

Articles

Все о строках в ...

Все о строках в Java

Строки Java - это объекты, которые поддерживаются массивом символов и являются неизменяемыми. Класс java.lang.String используется для создания объекта String. Существует два способа создания объекта String:

  1. Использование строкового литерала
  2. Использование ключевого слова 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 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
---------------
"Василий"

Comments

In order to leave your opinion, you need to register on the website