Java. Полное руководство. 8-е издание. С. Н. Тригуб Перевод с английского и редакция
Скачать 25.04 Mb.
|
Исходная строка Это тест Верхний регистр ЭТО ТЕСТ Нижний регистр это тест Еще один момент предоставляются также перегруженные версии методов toLowerCase ( ) и toUpperCase () , позволяющие определять объект класса Locale для управления преобразованием. В некоторых случаях определение региона может быть очень важными помочь интернационализировать ваше приложение. Дополнительные методы класса s t r i n В дополнение к методам, перечисленным выше, класс String обладает также многими другими методами, включая те, которые перечислены в табл. 15.2. Глава 15. Обработка строк Таблица 15.2. Дополнительные методы класса s t r i n g Метод Описание int codePointAt(int i) m t codePointBefore(int i) int codePointCount(int начало конец строка строка строка формстр, Object ... аргументы String format(Locale регион формстр, Object ... аргументы i s E m p t y O boolean matches(string регВыр) int offsetByCodePoints(int начало число replaceFirst(String регВыр, String новСтр) String replaceAll(String регВыр, String новСтр) S t r i n g [] split(String регВыр) S t r i n g [] split(String регВыр, int макс) Возвращает точку кода символа Unicode, находящегося в позиции Возвращает точку кода символа Unicode, находящегося в позиции, предшествующей Возвращает количество точек кода в части вызывающей строки между начало и конец- 1 Возвращает значение true, если вызывающий объект содержит строку, указанную в строка. В противном случае возвращает значение f a l s Возвращает значение true, если вызывающий объект содержит туже строку, что и строка. В противном случае возвращает значение Возвращает значение true, если вызывающий объект содержит туже строку, что и строка. В противном случае возвращает значение f a l s Возвращает строку, форматированную в соответствии с формстр. (Подробности о форматировании описаны в главе Возвращает строку, форматированную в соответствии с формстр. (Подробности о форматировании описаны в главе Возвращает значение true, если вызывающая строка не содержит символов и имеет нулевую длину Возвращает значение true, если вызывающая строка соответствует регулярному выражению, переданному в регВыр. В противном случае возвращает значение false Возвращает индекс в вызывающей строке, который находится на число точек кода за начальным индексом, указанным в начало Возвращает строку, в которой первая подстрока, соответствующая регулярному выражению регВыр , заменяется нов Стр Возвращает строку, в которой все подстроки, соответствующие регулярному выражению регВыр , заменяются новСтр Разбивает вызывающую строку на части и возвращает массив, содержащий результат. Каждая часть ограничена регулярным выражением регВыр Разбивает вызывающую строку на части и возвращает массив, содержащий результат. Каждая часть ограничена регулярным выражением регВыр. Количество частей указано в макс. Если значение макс отрицательное, значит, вызывающая строка разбивается полностью. В противном случае, если макс содержит неотрицательное значение, то последний элемент возвращаемого массива содержит остаток вызывающей строки. Если значение макс равно нулю, строка также разбивается полностью 6 1 Часть II. Библиотека Окончание табл. Метод ____________________ Описание _____________________ : , C h a r S e q u e n c e s u b s e q u e n c e ( int Возвращает подстроку вызывающей строки, начиная на чИ нд ек с кон Индекс с начИндекс и заканчивая конИндекс. Этот метод требует интерфейса CharSequence, который реализует класс Stri n Обратите внимание на то, что некоторые эти методы работают с регулярными выражениями. Регулярные выражения описаны в главе Класс S t r i n g B u f f e Этот класс подобен классу String, который представляет большую часть функциональных возможностей строк. Как вызнаете, класс String представляет неизменяемые последовательности символов постоянной длины. В отличие от этого, класс StringBuf fer представляет расширяемые и доступные для изменений последовательности символов. Он позволяет вставлять символы и подстроки в средину либо добавлять их вконец. Объект класса StringBuf fer автоматически увеличивает размер, чтобы обеспечить место для подобных расширений и зачастую чтобы обеспечить возможность роста, имеет больше предварительно зарезервированных символов, чем фактически нужно в данный момент. Конструкторы класса S t r i n g B u f f e В классе StringBuf fer определены следующие четыре конструктора t r i n g B u f f e r () S t r i n g B u f f e r (int размер rin gBuffer(String строка rin gBu ffer(CharSequence символы) Стандартный конструктор (без параметров) резервирует место под 16 символов без перераспределения памяти. Вторая версия принимает целочисленный аргумент, который явно устанавливает размер буфера. Третья версия принимает аргумент класса String, который устанавливает начальное содержимое объекта класса StringBuf fer и резервирует 16 символов без повторного резервирования. Класс Str ingBuf f er выделяет место под 16 дополнительных символов, когда не указывается конкретный размер буфера, поскольку резервирование памяти — дорогостоящая операция в смысле затрат времени. Кроме того, повторное резервирование может фрагментировать память. Выделяя место под несколько дополнительных символов, класс StringBuf fer снижает количество необходимых повторных резерви рований. Четвертый конструктор создает объект, содержащий последовательность символов из параметра символы, а также резервирует место еще для 16 символов. Методы l e n g t h ( ) и c a p a c i t y ( Текущую длину объекта класса StringBuf fer можно получить методом length (), а текущий объем выделенной памяти — методом capacity (). Они имеют следующую общую форму l e n g t h () int c a p a c i t y (Ниже показан пример Глава 15. Обработка строк 4 1 1 U Сравнение методов) и c a p a c i t y () класса S t r i n g B u f f e r . class Str ing Buf fer Dem o { public static v o id m ain (S t ri n g a r g s []) { Stri ngBuffer sb = ne w S t r i n g B u f f e r ("H e llo "); S y s t e m . o u t .p r i n t l n ("buffer = " + sb) ; S y s t e m . o u t .p r i n t l n ("length = " + s b . l e n g t h ()); S y s t e m . o u t . p r i n t l n ("capacity = " + s b . c a p a c i t y (Ниже представлен вывод этой программы, который показывает, как класс StringBuf fer резервирует запасное пространство для дополнительных манипуляций = Hello length = 5 capacit y = Поскольку строка sb инициирована значением "Hello " при создании, ее длина равна 5. Объем выделенной памяти (capacity) равен 21, так как 16 дополнительных символов добавлены автоматически. Метод e n s u r e C a p a c i t y ( Если вы хотите предварительно выделить место для определенного количества символов после создания объекта класса Str ingBuf f er, можете воспользоваться методом ensureCapacity () , чтобы установить размер буфера. Это удобно, если знаете наперед, что собираетесь добавлять в объект класса StringBuf fer большое количество маленьких строк. Метод ensureCapacity () имеет следующую общую форму oid e n s u r e C a p a c i t y (int минЕмкость) Здесь минЕмкость указывает минимальный размер буфера. (Буферы, размер которых превышает минЕмкость, также могут быть зарезервированы, по причинам эффективности.) Метод s e t L e n g t h ( Чтобы установить длину строки внутри объекта класса Str ingBuf fer, используйте метод setLength () . Общая форма этого метода выгладит следующим образом d s e t L e n g t h (int длина) Здесь длина указывает длину строки. Значение должно быть неотрицательным. Когда вы увеличиваете размер строки, вконец существующей строки добавляются нулевые символы. Если вы вызываете метод setLength () со значением, меньшим текущего значения, возвращаемого методом lengthf), то символы, находящиеся за пределами вновь установленной длины, будут утеряны. Пример программы в следующем разделе использует метод setLength () для сокращения объекта класса StringBuf Методы c h a r A t ( ) и s e t C h a r A t ( Значение отдельного символа может быть извлечено из объекта класса StringBuf fer методом charAt () . Вы можете установить значение символа внутри объекта класса StringBuf fer с помощью метода setCharAt () . Общая форма этих методов показана ниже Часть II. Библиотека Java char charAt(int где setCharAt(int где char символ) Для метода charAt () параметр где указывает индекс символа, который нужно извлечь. Для метода setCharAt () параметр где указывает индекс символа, который нужно установить, а символ его значение. Значение параметра где для обоих методов должно быть неотрицательными не должно находиться за пределами конца строки. В следующем примере демонстрируется применение методов charAt () и setCharAt(). // Демонстрация charAt() и setCharAt(). class setCharAtDemo { public static void main(String a r g s []) { StringBuffer sb = new буфер до = " + sb) до charAt(1) = " + sb.charAt(1)); s b .setCharAt(1, 'буфер после = " + после charAt(1) = " + Вывод, созданный этой программой, выглядит так. буфер до = Hello до charAt(1) = е буфер после = Hi после c h arAt(1) = Метод g e t C h a r s ( Чтобы скопировать подстроку из объекта класса StringBuffer в массив, используйте метод getChars () . Он имеет следующую форму getChars (int начИсточника, int конИсточника, char цель [ ] 7 int начЦели) Здесь начИсточника указывает индекс начала подстроки, а конИсточника — индекс символа, следующего за концом требуемой подстроки. Это означает, что подстрока содержит символы от начИсточника до конИсточника- 1. Массив, который принимает символы, передается через параметр цель. Индекс внутри параметра цель, куда копируется подстрока, передается в параметре начЦели. Необходимо позаботиться о том, чтобы массив цель был достаточного размера, чтобы вместить количество символов указанной подстроки. Метод a p p e n d ( Метод append () соединяет строковое представление любого другого типа данных с концом вызывающего объекта класса StringBuffer. Он имеет несколько перегруженных версий. Вот несколько из них append(String строка append(int число append(Object объект) Строковое представление каждого параметра зачастую получают вызовом метода String .valueOf () . Результат добавляется к текущему объекту класса StringBuffer. Сам буфер возвращается каждой версии метода append () . Это Глава 15. Обработка строк 4 1 позволяет соединять несколько последовательных вызовов вместе, как показано в следующем примере Демонстрация применения append(). class appendDemo { public static void main(String args[]) { String s; int a = 42; StringBuffer sb = new StringBuffer(40); s = sb.append("a = ").append(a).a p Вывод этого примера показан ниже. а = Метод i n s e r t ( Этот метод вставляет одну строку в другую. Он перегружен так, чтобы принимать в параметре значения всех элементарных типов плюс объекты классов String, Obj ect и CharSequence. Подобно методу append () , он получает строковое представление значения, с которым вызван. Эта строка затем вставляется в вызывающий объект класса St г ingBuf f er. Существует несколько форм этого метода. StringBuffer insert(int индекс String строка insert(int индекс char символ insert(int индекс Object объект) Здесь индекс указывает индекс позиции вызывающего объекта класса StringBuffer, в которой будет вставлена строка. Следующий пример программы демонстрирует вставку слова " l i k e " между " I " и " J a v a ": // Демонстрация применения insert(). class insertDemo { public static void main(String a r g s []) { StringBuffer sb = new StringBuffer("I Java!"); sb.insert(2, "like "Вывод этой программы выглядит следующим образом like Метод r e v e r s e ( Изменить порядок символов в объекте класса StringBuffer на обратный можно с помощью метода reverse (). StringBuffer Этот метод возвращает объект с обратной последовательностью символов по отношению к тому, который его вызвал. В следующей программе демонстрируется использование метода reverse (). // Применения reverse() для обращения порядка StringBuffer. class ReverseDemo { public static void main(String a r g s []) { StringBuffer s = new StringBuffer("abcdef"); Часть II. Библиотека Java System.out.println(s ) ; s .reverse(); System.out.println(s Вывод этой программы показан ниже Методы d e l e t e ( ) и d e l e t e C h a r A t ( Вы можете удалять символы из объекта класса StringBuf f ег с помощью методов delete( ) и deleteCharAt(). StringBuffer delete(int начИндекс, int конИндекс) StringBuffer deleteCharAt(int позиция) Метод delete () удаляет последовательность символов из вызывающего объекта. Здесь начИндекс задает индекс первого символа, который надо удалить, а конИндекс — индекс символа, следующего за последним из удаляемых. Таким образом, удаляемая подстрока начинается с начИндекс и заканчивается конИндекс-1. Возвращается результирующий объект класса Метод deleteCharAt () удаляет символ, находящийся в позиции позиция Возвращает результирующий объект класса Вот программа, которая демонстрирует методы delete ( ) и deleteCharAt (). // Демонстрация применения d e lete() и deleteCharAt() class deleteDemo { public static void main(String a r g s []) { StringBuffer sb = new StringBuffer("This is a test."); sb.delete(4, После delete: " + sb) ; s b После deleteCharAt: " + sb) Программа создает такой вывод. После delete: This a После deleteCharAt: his a Метод r e p l a c e ( Вызвав метод replace () , вы можете заменить один набор символов другим внутри объекта класса StringBuffer. Сигнатура этого метода показана ниже replace(int начИндекс, int конИндекс, String строка) П одстрока, которую нужно заменить, задается индексами начИндекс и конИндекс . Таким образом, заменяется подстрока от символа начИндекс до конИндекс-1. Строка замены передается в параметре строка Возвращается результирующий объект класса В следующей программе демонстрируется использование метода replace (). // Демонстрация применения replace() class replaceDemo { Глава 15. Обработка строк 4 1 5 public static void main(String a r g s []) { StringBuffer sb = new StringBuffer("This is a test."); s b .replace(5, 7, "После замены " + sb) Ниже показан вывод программы. После замены This was a Метод s u b s t r i n g ( Вы можете получить часть содержимого объекта класса S t r i n g B u f f e r вызовом метода s u b s t r i n g (). Этот метод имеет две следующие формы substring(int начИндекс) String substring(int начИндекс, int конИндекс) Первая форма возвращает подстроку, которая начинается от начИндекс и продолжается до конца вызывающего объекта класса S t r i n g B u f f e r . Вторая форма возвращает подстроку от позиции начИндекс до конИндекс-1. Эти методы работают точно также, каких описанные выше аналоги в классе S t r i n g . Дополнительные методы класса S t r i n g B u f f e В дополнение к описанным методам класса StringBuffer, он содержит ряд других, включая перечисленные в табл. Таблица 15.3. Дополнительные методы класса S t r i n g B u f f e r Метод Описание StringBuffer appendCodePoint(int символ) int codePointAt(int i) int codePointBefore(int i) int начало конец строка indexOf(String строка, int начИндекс) int lastlndexOf(String строка Добавляет точку кода Unicode вконец вызывающего объекта. Возвращается ссылка на объект Возвращает точку кода Unicode в позиции, указанной в параметре Возвращает точку кода Unicode в позиции, предшествующей Возвращает количество точек кода в части вызывающей строки, заключенной между начало и конец Выполняет поиск в вызывающем объекте класса StringBuffer первого вхождения строка. Возвращает индекс позиции совпадения или значение -1 — в случае неудачи Выполняет поиск в вызывающем объекте класса StringBuf fer первого вхождения строка начиная с начИндекс. Возвращает индекс позиции совпадения или значение -1 — в случае неудачи Выполняет поиск в вызывающем объекте класса StringBuffer последнего вхождения строка. Возвращает индекс позиции совпадения или значение -1 — в случае неудачи 4 1 Часть II. Библиотека Окончание табл. 15.3 Метод Описание int lastlndexOf(String строка int начИндекс) int offsetByCodePoints(int начало int число subsequence(int начИндекс, int конИндекс) void trimT o S i z e Выполняет поиск в вызывающем объекте класса StringBuffer последнего вхождения строка начиная с начИндекс. Возвращает индекс позиции совпадения или значение -1 — в случае неудачи Возвращает индекс символа в вызывающей строке, который находится на число точек кода позади начального индекса, указанного в начало Возвращает подстроку вызывающей строки, начиная с начИндекс и заканчивая конИндекс. Этот метод требует интерфейса |