Класс String
- Создание строк и длина строки
- Сравнение строк
- Сравнение подстрок
- Метод compareTo()
- Извлечение символов - метод charAt()
- Поиск подстроки или символа в строке в Java
- Методы concat(), replace(), toLowerCase(), toUpperCase(), trim()
- Преобразование данных с помощью valueOf()
- Метод substring()
- Соединение символьных строк
- Методы isEmpty(), isBlank()
1. Создание строк и длина строки
Класс String
поддерживает несколько конструкторов, например:
- String(),
- String(String str),
- String(byte[] asciichar),
- String(char[] unicodechar),
- String(StringBuffer sbuf),
- String(StringBuilder sbuild) и др.
Для нахождения длины строки используется метод length()
.
Рассмотрим разные варианты создания строк:
public class StringDemo1 {
public static void main(String[] args) {
String str1 = new String();
System.out.println("str1:[" + str1 + "]");
char[] chars1 = {'а', 'b', 'с'};
String str2 = new String(chars1);
System.out.println("str2:" + str2);
char[] chars2 = {'a', 'b', 'с', 'd', 'e', 'f'};
String str3 = new String(chars2, 2, 3);
System.out.println("str3:" + str3);
String str4 = "abc";
System.out.println("str4:" + str4);
System.out.println("str4.length:" + str4.length());
System.out.println("abc.length:" + "abc".length());
String str5 = new String(str4);
System.out.println("str5:" + str5);
}
}
В следующем примере показано, как создавать строки из массива типа byte
:
public class StringDemo2 {
public static void main(String[] args) {
byte[] bytes = {65, 66, 67, 68, 69, 70};
String s1 = new String(bytes);
System.out.println(s1);
String s2 = new String(bytes, 2, 3);
System.out.println(s2);
}
}
2. Сравнение строк
Для сравнения строк используются методы equals()
и equalsIgnoreCase()
, который не учитывает регистр символов:
public class EqualsDemo {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "Hello";
String s3 = "Good-bye";
String s4 = "HELLO";
System.out.println(s1 + " equals " + s2 + " -> "
+ s1.equals(s2));
System.out.println(s1 + " equals " + s3 + " -> "
+ s1.equals(s3));
System.out.println(s1 + " equals " + s4 + " -> "
+ s1.equals(s4));
System.out.println(s1 + " equalsIgnoreCase " + s4 + " -> "
+ s1.equalsIgnoreCase(s4));
}
}
В Java существует так называемый String Pool, в котором хранятся созданные строки. При создании очередной строки, JVM сначала ищет такую строку в String Pool. Если такая строка уже есть, то она возвращается вместо создания новой.
String Pool не используется, если строка создается с помощью конструктора. В этом случае гарантированно создается новый объект:
Следующий пример демонстрирует сравнение строк с помощью ==
и метода equals()
:
public class EqualStrings {
public static void main(String[] args) {
String s1 = "Java";
String s2 = "Java";
String s3 = new String("Java");
String s4 = new String(s1);
System.out.println("s1==s2 : " + (s1 == s2));
System.out.println("s3==s4 : " + (s3 == s4));
System.out.println("s1==s3 : " + (s1 == s3));
System.out.println("s1 equals s2 : " + s1.equals(s2));
System.out.println("s1 equals s3 : " + s1.equals(s3));
}
}
3. Сравнение подстрок
В классе String
реализована группа методов, сравнивающих часть строки с подстрокой:
- Метод
regionMatches()
используется для сравнения подстроки в исходной строке с подстрокой в строке параметре. - Метод
startsWith()
проверяет, начинается ли данная подстрока фрагментом, переданным методу в качестве параметра. - Метод
endsWith()
проверяет, совпадает ли с параметром конец строки. - Метод
contains()
проверяет, входит ли подстрока в строку.
Рассмотрим пример:
public class StringDemo5 {
public static void main(String[] args) {
System.out.println("Foobar".endsWith("bar"));
System.out.println("Foobar".startsWith("Foo"));
System.out.println("Foobar".contains("oo"));
System.out.println("Hello world!!!".regionMatches(6, "world", 0, 3));
}
}
4. Метод compareTo()
Зачастую бывает недостаточно просто знать, являются ли две строки идентичными. Для приложений, в которых требуется сортировка, нужно знать, какая из двух строк меньше другой. Для ответа на этот вопрос нужно воспользоваться методом compareTo(str)
класса String
.
Если результат метода меньше нуля - вызывающая строка меньше str
. Больше нуля - вызывающая строка больше str
. Ноль - две строки эквивалентны.
Следующий пример показывает сортировку строкового массива с помощью пузырька:
public class SortString {
private static String[] array = {
"Для", "работы", "со", "строками", "в", "языке", "Java",
"используются", "классы", "String", "StringBuilder", "StringBuffer"
};
public static void main(String[] args) {
for (int j = 0; j < array.length; j++) {
for (int i = j + 1; i < array.length; i++) {
if (array[i].compareTo(array[j]) < 0) {
String t = array[j];
array[j] = array[i];
array[i] = t;
}
}
}
System.out.println(Arrays.toString(array));
}
}
5. Извлечение символов – метод charAt()
Извлечение символов осуществляется с помощью метода charAt()
класса String
:
public class StringDemo3 {
public static void main(String[] args) {
char ch = "аbс".charAt(1);
System.out.println(ch);
}
}
6. Поиск подстроки или символа в строке в Java
В класс String
включена поддержка поиска определенного символа или подстроки, для этого в нем имеются два метода — indexOf()
и lastIndexOf()
.
indexOf()
- ищет первое вхождение символа или подстроки.
lastlndexOf()
- ищет последнее вхождение символа или подстроки.
Каждый из этих методов возвращает индекс того символа, который вы хотели найти, либо индекс начала искомой подстроки. В любом случае, если поиск оказался неудачным, методы возвращают значение -1.
Чтобы найти первое или последнее вхождение символа, применяйте:
int indexOf(char ch)
int lastlndexOf(char ch)
Здесь ch
символ, который нужно искать. Чтобы найти первое или последнее вхождение подстроки, применяйте:
int indexOf(String str)
int lastlndexOf(String str)
Вы можете указать начальную позицию для поиска, воспользовавшись следующими формами:
int indexOf(int ch, int startIndex)
int lastlndexOf(int ch, int startIndex)
int indexOf(String str, int startIndex)
int lastlndexOf(String str, int startIndex)
Рассмотрим применение этих методов на следующем примере:
public class IndexOfDemo {
public static void main(String[] args) {
String s = "Для работы со строками в языке Java используются "
+ "классы String, StringBuilder, StringBuffer.";
System.out.println(s);
System.out.println("indexOf(S) = "
+ s.indexOf('S'));
System.out.println("lastIndexOf(r) = "
+ s.lastIndexOf('r'));
System.out.println("indexOf(String) = "
+ s.indexOf("String"));
System.out.println("lastIndexOf(String) = "
+ s.lastIndexOf("String"));
System.out.println("indexOf(S, 60) = "
+ s.indexOf('S', 60));
System.out.println("lastIndexOf(S, 70) = "
+ s.lastIndexOf('S', 70));
}
}
7. Методы concat(), replace(), toLowerCase(), toUpperCase(), trim()
Метод concat()
используется для объединения двух строк.
Метод replace()
заменяет один символ на другой.
Методы toLowerCase()
и toUpperCase()
приводят строку к верхнему или нижнему регистру.
public class ModifyStringDemo {
public static void main(String[] args) {
System.out.println("Hello".concat(" World"));
System.out.println("Hello".replace('l', 'w'));
System.out.println("Hello".toLowerCase());
System.out.println("Hello".toUpperCase());
System.out.println(" Hello World ".trim());
}
}
8. Преобразование данных с помощью valueOf()
Если Вы имеете дело с каким-либо типом данных и хотите вывести значение этого типа в удобочитаемом виде, сначала придется преобразовать это значение в текстовую строку. Для этого существует метод valueOf()
.
Такой статический метод определен для любого существующего в Java типа данных. Благодаря этому не составляет труда преобразовать в строку значение любого типа.
static String valueOf(double num)
static String valueOf(long num)
static String valueOf(Object оb)
static String valueOf(char[] chars)
9. Метод substring()
Метод substring()
вырезает подстроку из строки, используя указанные позиции. Существует два варианта этого метода. Первый вариант вырезает от указанной позиции и до конца. Второй - от первой позиции до второй. Символ, находящийся в первой позиции, будет включен в результирующую строку. А последний - нет.
public class SubstringDemo {
public static void main(String[] args) {
System.out.println("Welcome to Kharkiv!!!".substring(10));
System.out.println("Welcome to Kharkiv!!!".substring(10, 18));
}
}
10. Соединение символьных строк
В версию JDK 8 в класс String
был внедрен новый метод join(), предназначенный для соединения двух и более символьных строк, разграничиваемых указанным разделителем, например, пробелом или запятой:
public class StringJoinDemo {
public static void main(String[] args) {
String result = String.join(":", "foobar", "foo", "bar");
System.out.println(result);
}
}
11. Методы isEmpty(), isBlank()
Метод isEmpty()
проверяет пустая ли строка. Возвращает true
, только если длина строки равна 0.
Метод isBlank()
возвращает true
, если строка пуста или содержит только пробелы (Java 11).
public class StringEmpty {
public static void main(String[] args) {
System.out.println("".isEmpty());
System.out.println(" ".isEmpty());
System.out.println(" ".isBlank());
}
}
Please log in or register to have a possibility to add comment.