Урок 12

Строки

1. Строки в языке Java

Системная библиотека Java содержит следующие классы, поддерживающие работу со строками и определенные в пакете java.lang, подключаемом автоматически: String, StringBuilder, StringBuffer.

Эти классы объявлены как final, что означает невозможность создания собственных порожденных классов со свойствами строки.

2. Создание строк

Класс String поддерживает несколько конструкторов, например:

  • String(),
  • String(String str),
  • String(byte[] asciichar),
  • String(char[] unicodechar),
  • String(StringBuffer sbuf),
  • String(StringBuilder sbuild) и др.

Пример 1. Создание строк

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);
    }
}

Пример 2. Создание строк из массива 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);
    }
}

3. Сравнение строк

Пример 3. Сравнение строк

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));
    }
}

String pool

Пример 4. Сравнение строк

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));
    }
}

4. Сравнение подстрок

В классе String реализована группа методов, сравнивающих часть строки с подстрокой:

  • Метод regionMatches() используется для сравнения подстроки в исходной строке с подстрокой в строке-параметре.
  • Метод startsWith() проверяет, начинается ли данная подстрока фрагментом, переданным методу в качестве параметра.
  • Метод endsWith() проверяет совпадает ли с параметром конец строки.
  • Метод contains() проверяет входит ли подстрока в строку.

Пример 5. Сравнение подстрок

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));
    }
}

5. Метод compareTo()

Зачастую бывает недостаточно просто знать, являются ли две строки идентичными. Для приложений, в которых требуется сортировка, нужно знать, какая из двух строк меньше другой. Для ответа на этот вопрос нужно воспользоваться методом compareTo(str) класса String.

Если результат метода меньше нуля - вызывающая строка меньше str. Больше нуля - вызывающая строка больше str. Ноль - две строки эквивалентны.

Пример 6. Сортировка пузырьком

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));
    }
}

6. Извлечение символов – метод charAt()

Пример 7. Извлечение символов

public class StringDemo3 {
    public static void main(String[] args) {
        char ch = "аbс".charAt(1);
        System.out.println(ch);
    }
}

7. Методы indexOf() и lastlndexOf()

В класс 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)

Пример 8. Использование методов indexOf() и lastlndexOf()

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));
    }
}

8. Методы concat(), replace(), toLowerCase(), toUpperCase(), trim()

Пример 9. Использование методов concat(), replace(), toLowerCase(), toUpperCase(), trim()

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());
    }
}

9. Преобразование данных с помощью valueOf()

Если Вы имеете дело с каким-либо типом данных и хотите вывести значение этого типа в удобочитаемом виде, сначала придется преобразовать это значение в текстовую строку. Для этого существует метод valueOf().

Такой статический метод определен для любого существующего в Java типа данных. Благодаря этому не составляет труда преобразовать в строку значение любого типа.

static String valueOf(double num) 
static String valueOf(long num) 
static String valueOf(Object оb) 
static String valueOf(char[] chars)

10. Метод substring()

Пример 10. Использование метода 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));
    }
}

11. Соединение символьных строк

В версию JDK 8 в класс String был внедрен новый метод join(), предназначенный для соединения двух и более символьных строк, разграничиваемых указанным разделителем, например, пробелом или запятой.

Пример 11. Соединение символьных строк

public class StringJoinDemo {
    public static void main(String[] args) {
        String result = String.join(":", "foobar", "foo", "bar");
        System.out.println(result);
    }
}

12. Методы isEmpty(), isBlank()

Метод isEmpty() проверяет пустая ли строка. Возвращает true, только если длина строки равно 0.

Метод isBlank() возвращает true, если строка пуста или содержит только пробелы (Java 11).

Пример 12. Проверка пустых строк

public class StringEmpty {
    public static void main(String[] args) {
        System.out.println("".isEmpty());
        System.out.println(" ".isEmpty());
        System.out.println(" ".isBlank());
    }
}



0 Comments
Leave your comment: