java.lang.String - наиболее часто используемый класс в Java. Важно понимать и уметь свободно манипулировать строками.
- Класс String
- Строковые методы
- Сравнение строк
Класс String
String - это встроенный в Java класс для хранения последовательности символов между двойными кавычками. Он находится в пакете java.lang, поэтому нам не нужно импортировать его, он будет импортирован автоматически для каждого класса.
public class Main { public static void main(String[] args) { String str = "apple"; System.out.println(str); // apple str = "banana"; System.out.println(str); // banana String name = new String("John"); System.out.println(name); // John } }
- Мы можем инициализировать строку напрямую, используя оператор
=
, или мы можем создать, используя ключевое словоnew
. Первая версия будет использовать память StringPool, а вторая опция создаст объект в памяти кучи.
public class Main { public static void main(String[] args) { String str = "apple"; System.out.println(str); // apple str.toUpperCase(); // original value will not get changed System.out.println(str); // apple str = str.toUpperCase(); // reassign new value System.out.println(str); // APPLE } }
- Строка - это неизменяемый класс. Это самое важное определение, которое нужно запомнить. Неизменяемость означает, что однажды созданное с некоторым значением мы не можем его изменить. Чтобы было ясно, мы можем переназначить значение ссылки (как показано в приведенном выше примере с помощью str), но исходный объект, который был создан в начале, никогда не будет изменен.
- Строка потокобезопасна. Все неизменяемые классы являются потокобезопасными, потому что их нельзя изменить.
- Если вы переназначаете свою строковую ссылку большое количество раз в каком-то бесконечном цикле. Вместо этого рассмотрите возможность использования StringBuilder и конвертируйте в String после цикла. Потому что каждый раз, когда вы переназначаете свою строку, вы создаете новый объект в памяти.
- Строка - это последний класс, и мы не можем расширять последние классы.
Строковые методы
Методы, предоставляемые классом String, можно использовать для управления его значением. Большинство методов String возвращают новое значение и никогда не изменяют фактическое значение строки.
toUpperCase () и toLowerCase ()
String str = "apple"; str = str.toUpperCase(); // it will return new string with all upper cases System.out.println(str); // APPLE String name = "John Doe"; name = name.toLowerCase(); // it will return new string with all lower cases System.out.println(name); // john doe
Метод length () возвращает количество символов в строке.
String str = "apple"; // .length() method returns number of characters in the string int strLength = str.length(); System.out.println(strLength); // 5 str = "car "; // space is also the character System.out.println(str.length()); // 4
Строковые индексы
Строка внутренне основана на массиве символов. Каждый символ, включая пустое пространство, имеет специальную позицию - индекс. Индекс начинается с 0. Некоторые методы используют индексы строки.
подстрока (начало) и подстрока (начало, конец)
// 012345678910 String java = "Java is fun"; // Using substring we can get part of the string based on indexes String javaFun = java.substring(8); System.out.println(javaFun); // fun System.out.println(java); // Java is fun // 0123456789 String str = "SoftSkills"; str = str.substring(4); System.out.println(str); // Skills str = "my workspace"; str = str.substring(7); System.out.println(str); // space // 0123456789 String str1 = "SoftSkills"; str1 = str1.substring(0, 4); System.out.println(str1); // Soft String str2 = "Java is Cool!"; str2 = str2.substring(5, 7); System.out.println(str2); // is // 012345678 String str3 = "workspace"; str3 = str3.substring(0, 4); System.out.println(str3); // work
indexOf используется для получения индекса определенной строки или символа
// 01234567 String str = "applpepp"; int index = str.indexOf("e"); System.out.println(index); // 4 System.out.println(str.indexOf("l")); // 3 System.out.println(str.indexOf("p")); // 1 System.out.println(str.lastIndexOf("p")); // 7 looking from back
charAt (index) используется для получения определенного символа по индексу.
// 0123 String str = "home"; char ch = str.charAt(1); System.out.println(ch); // o // 012345 str = "Public"; char ch2 = str.charAt(5); System.out.println(ch2); // c // 0123456 str = "Pricing"; System.out.println(str.charAt(6)); // g
replace (oldChar, newChar) используется для замены старого символа на новый символ в строке, и он вернет измененную строку.
String city = "Alma-Ata"; System.out.println(city); // Alma-Ata city = city.replace("-", " "); System.out.println(city); // Alma Ata String word = "Hello, World!"; word = word.replace("Hello", "Aloha"); System.out.println(word); // Aloha, World!
split (str) мы можем разделить нашу строку и получить массив строк как части.
String str = "My name is John Doe"; String[] parts = str.split(" "); for (String part : parts) { System.out.println(part); }
Вывод:
My name is John Doe
contains (str) проверяет, содержит ли одна строка другую. Тип возврата - логический.
String topic = "Variables, assignment operator, arithmetic operator, input from terminal"; boolean isThere = topic.contains("input"); System.out.println(isThere); // true System.out.println(topic.contains("java")); // false System.out.println(topic.contains("terminal")); // true
Сравнение строк
Чтобы сравнить две строки на равенство, нам нужно использовать метод equals
. Никогда не используйте оператор ==
для сравнения строк. Похоже, что это оператор ==
, сравнивающий фактическое содержимое из-за пула строк, но он проверяет, указывают ли две ссылки на объект или нет.
Пул строк - это память, которую String использует для повторного использования одних и тех же данных. Когда мы создаем строку как String name = "Alex";
, она будет сохранена в пуле строк. Существует механизм, который проверяет перед созданием новой строки, имеет ли пул sting уже такое же значение, и если да, он будет использовать его повторно. Это безопасно, потому что String неизменяем.
String str = "hello"; String str1 = "hello"; System.out.println(str == str1); // true System.out.println(str.equals(str1)); // true
- Когда мы создали
str
, в пуле строк вообще нет строковых объектов, поэтому будет создан новый строковый объект с"hello"
значением. - Когда мы создали
str1
, в пуле строк уже есть один строковый объект с таким же значением. Он просто повторно использует тот же объект и заставляетstr1
указывать на него. По этой причине==
возвращает истину - обе ссылки указывают на один и тот же объект. equals()
сравнить фактическое значение строки.
String str = new String("hello"); String str1 = new String("hello"); System.out.println(str == str1); // false System.out.println(str.equals(str1)); // true
- если мы создадим строку с ключевым словом
new
, она не будет использовать пул строк, и будут созданы два отдельных объекта. Вот почему у нас ложь при использовании оператора==
. equals()
сравнить фактическое значение строки.
Это все, что у меня есть на сегодня. Спасибо!
This article is part of the series of articles to learn Java programming language from Tech Lead Academy: 1. Introduction to programming 2. OS, File, and File System 3. Working with terminal 4. Welcome to Java Programming Language 5. Variables and Primitives in Java 6. Methods with Java 7. Java Math Operators and special operators 8. Conditional branching in Java 9. Switch statement in Java 10. Ternary operator in Java 11. Enum in Java 12. String class and its methods in Java 13. Loops in Java 14. Access modifiers in Java 15. Static keyword in Java 16. The final keyword in Java 17. Class and Object in Java 18. Object Oriented Programming in Java 19. OOP: Encapsulation in Java 20. Inheritance in Java 21. Abstraction in Java 22. Polymorphism in Java 23. Overriding vs Overloading in Java 24. OOP Design Principles in Java 25. Array in Java 26. Data Structures with Java 27. Collection framework in Java 28. ArrayList in Java 29. Set in Java 30. Map in Java 31. LocalDate in Java 32. Exception in Java 33. IO in Java 34. Design Patterns 35. Generics in Java 36. Multithreading in java 37. JUnit 38. Big O Notation for coding interviews 39. Top 17 Java coding interview questions for SDET