8. Должны ли методы настраиваемого класса быть настраиваемыми?
9. Можно ли создавать настраиваемые методы в обычных, не настраиваемых классах?
ГЛАВА 5
Очень большое место в обработке информации занимает работа с текстами. Как и многое другое, текстовые строки в языке Java являются объектами. Они представляются экземплярами класса String или класса StringBuilder. В многопоточной среде вместо класса StringBuilder, не обеспечивающего синхронизацию, следует использовать класс stringBuffer, но эти вопросы мы отложим до главы 23.
Класс StringBuilder введен в стандартную библиотеку Java, начиная с версии Java SE 5, для ускорения работы с текстом в одном подпроцессе.
Все эти классы реализуют интерфейс charSequence, в котором описаны общие методы работы со строками любого типа. Таких методов немного:
□ length () — возвращает количество символов в строке;
□ charAt (int pos) - возвращает символ, стоящий в позиции pos строки. Символы в
строке нумеруются, начиная с нуля;
□ subSequence (int start, int end) - возвращает подстроку, начинающуюся с позиции
start и заканчивающуюся перед позицией end исходной строки.
Поначалу представление строк объектами необычно и кажется слишком громоздким, но, привыкнув, вы оцените удобство работы с классами, а не с массивами символов.
Конечно, можно занести текст в массив символов типа char или даже в массив байтов типа byte, но тогда вы не сможете использовать готовые методы работы с текстовыми строками.
Зачем в язык введены три класса для хранения строк? В объектах класса String хранятся строки-константы неизменной длины и содержания, так сказать, отлитые в бронзе. Это значительно ускоряет обработку строк и позволяет экономить память. Компилятор создает только один экземпляр строки класса String и направляет все ссылки на него. Длину строк, хранящихся в объектах классов StringBuilder и StringBuffer, можно менять, вставляя и добавляя строки и символы, удаляя подстроки или сцепляя несколько строк в одну. Во многих случаях, когда надо изменить длину строки типа String, компилятор Java неявно преобразует ее к типу StringBuilder или StringBuffer, меняет длину, потом преобразует обратно в тип String. Например, следующее действие:
String s = "Это" + " одна " + "строка";
компилятор выполнит примерно так:
String s = new StringBuffern.appendC^To'^.appendC одна ")
.append("строка").toString();
Будет создан объект класса StringBuffer или класса StringBuilder, в него методом append ( ) последовательно будут добавлены строки "Это", " одна ", "строка", и получившийся объект класса StringBuffer или StringBuilder будет приведен к типу String методом toString ( ).
Напомним, что символы в строках хранятся в кодировке Unicode, в которой каждый символ занимает два байта. Тип каждого символа — char.
Класс String
Перед работой со строкой ее следует создать, как и объект всякого класса. Это можно сделать разными способами.
Как создать строку
Самый простой способ создать строку — это организовать ссылку типа String на строку-константу:
String s1 = "Это строка.";
Если константа длинная, можно записать ее в нескольких строках текстового редактора, связывая их операцией сцепления:
String s2 = "Это длинная строка типа String, " +
"записанная в двух строках исходного текста";
Замечание
Не забывайте о разнице между пустой строкой String s = "", не содержащей ни одного символа, и пустой ссылкой String s = null, не указывающей ни на какую строку и не являющейся объектом.
Самый правильный способ создать объект с точки зрения ООП — это вызвать его конструктор в операции new. Класс String предоставляет вам более десяти конструкторов:
□ String () — создается объект с пустой строкой;
□ String (String str) — конструктор копирования: из одного объекта создается его точная копия, поэтому данный конструктор используется редко;
□ String (StringBuffer str) -преобразованная копия объекта класса StringBuffer;
□ String(StringBuilder str) — преобразованная копия объекта класса StringBuilder;
□ String(byte[] byteArray) — объект создается из массива байтов byteArray;
□ String (char [ ] charArray) — объект создается из массива charArray символов Unicode;
Читать дальше
Конец ознакомительного отрывка
Купить книгу