Урок 12

Строки

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

Строка в языке Java — это основной носитель текстовой информации. Это не массив символов типа char, а объект соответствующего класса.

Системная библиотека 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[] ascii = {65, 66, 67, 68, 69, 70};

        String s1 = new String(ascii);
        System.out.println(s1);

        String s2 = new String(ascii, 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 реализована группа сервисных методов, являющихся специализированными версиями метода equals():

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

Пример 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("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(array[j]);
        }
    }
}

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(r) = "
                + s.indexOf('r'));
        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()

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




0 comments
Leave your comment: