Строки в Java

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 8 мес., 3 нед. назад.

  • Автор
    Сообщения
  • #3527

    Как в большинстве других языков программирования, строка в Java – это последовательность символов. Но, в отличие от многих языков, которые реализуют строки как символьные массивы, в Java строки реализуются как объекты типа String.

    Реализация строк в виде встроенных объектов обеспечивает полный комплект свойств, которые делают обработку строк очень удобной. Например, в Java существуют методы для сравнения двух строк, поиска подстроки, конкатенации (сцепления) двух строк и изменения регистра символов строки. Имеется несколько способов создания String-объектов, что облегчает их построение.

    Несколько неожиданно, что после создания String-объекта символы, входящие в строку, нельзя изменять. Сначала это кажется серьезным ограничением. Однако это не так. Над этим объектом можно выполнять все типы строковых операций. Для того чтобы изменить версию существующей строки, нужно создать новый объект типа String, который содержит необходимую модификацию. Исходная строка остается неизменной. Этот подход используется, потому что фиксированные, неизменяемые строки можно реализовать более эффективно, чем изменяемые. Для тех случаев, когда желательна изменяемая строка, существует компаньон класса String с именем StringBuffer, чьи объекты содержат строки, которые могут изменяться после их создания.

    Классы String и StringBuffer определены в пакете java.lang. Таким образом, они доступны всем программам автоматически. Оба объявлены как final, что означает, что ни один из этих классов не может иметь подклассов. При этом допускаются некоторые оптимизации, которые увеличивают эффективность строковых операций.

    И последнее. Когда говорят, что строки в объектах типа String являются неизменяемыми, это означает, что содержимое String-объекта не может быть модифицировано после того, как он был создан. Однако переменную, объявленную как String-ссылка, можно в любое время изменить так, чтобы она указывала на другой String-объект.

    Чтобы создать пустой объект типа String, необходимо поступить следующим образом:
    String s = new String ();

    Данная операция создает экземпляр класса String, не содержащий символов (пустую строку).

    Часто необходимо создавать строки с начальными значениями. Чтобы создать String-объект, инициализированный массивом символов, используйте следующий конструктор:
    String(char chars[])
    Например:

    char chars[] = {'a', 'b', 'с'};
    String s - new String(chars);

    Этот конструктор инициализирует (объектную) переменную s строкой "abc".

    Длина строки в Java

    Длина строки определяется количеством содержащихся в ней символов. Для получения этого значения вызовите метод length() в форме:
    int length ()
    Следующий фрагмент выведет число 3, т. к. в строке s имеется три символа:

    char chars[] =  {   'а',   'b',    'с’   };
    String s = new String(chars); 
    System.out.println(s.length()):

    Специальные строковые операции Java

    Поскольку работа со строками – обычная и очень важная часть программирования, в синтаксис языка Java добавлена поддержка для некоторых специальных строковых операций. К этим операциям относятся автоматическое создание новых String-объектов из строковых литералов, конкатенация множественных String-объектов при помощи операции + и преобразование других типов данных в строковое представление. Существуют явные методы для реализации всех этих функций, но Java выполняет их автоматически как для удобства программиста, так и для того, чтобы сделать запись программы более ясной.

    Строковые литералы Java

    Строковые литералы в Java определяются так же, как в большинстве других языков – включением последовательности символов между парой двойных кавычек. Примеры строковых литералов:

    "Hello World"
    "two\nLines"
    "\"This is in quotes\""

    Обратите внимание на одну важную деталь: строковые литералы должны начинаться и заканчиваться на той же строке.

    Предыдущие примеры показали, как можно явно создавать String-объекты из массива символов, используя операцию new. Однако есть более простой способ – можно для этой же цели использовать строковый литерал. Для каждого строкового литерала в программе Java автоматически создает String-объект. Например, следующий кодовый фрагмент создает две эквивалентные строки:

    char chars[]   =   {   'a',   'b'   'с'   };
    String s1 = new String(chars);
    String s2 = "abc";	// использование строкового литерала

    Поскольку объект типа String создается для каждого строкового литерала, то этот литерал можно применять в любом месте, где указывается String-объект. Например, разрешается вызывать методы, используя строку в кавычках прямо на месте объектной ссылки, как показано в следующем операторе:

    System.out.println("abc".length());

    Здесь строчный литерал ("abc") указан на месте, где должна бы была стоять объектная ссылка s2 из предыдущего фрагмента. Аргумент "abc".length() вызывает метод length() прямо для строки "abc" (вместо того, чтобы вызвать его для объекта s2). Как и ожидается, оператор напечатает число “3”.

Для ответа в этой теме необходимо авторизоваться.