1 Java 7. ОБРАБОТКА СТРОК. 2 Строка в языке Java Строка в языке Java – (основной носитель текстовой информации) НЕ МАССИВ символов типа char, А ОБЪЕКТ.

Презентация:



Advertisements
Похожие презентации
СТРОКИ Работа со строками. Последовательность выполнения операторов int age = 45; String s = "Не is " + age + " years old."; age не String, а переменная.
Advertisements

1 Работа со строками в Java В языках С и C++ отсутствует встроенная поддержка такого объекта, как строка. В этих ЯП при необходимости передается адрес.
Строки Класс String инкапсулирует действия со строками. Объект типа String – строка, состоящая из произвольного числа символов, от 0 до 2*10 9. Литерные.
Коллекции классов Лекция 12. С помощью коллекций вместо создания структур данных программист использует готовые структуры данных, не заботясь об их реализации.
JAVA, Кафедра ОСУ, АВТФ1 Работа со строками В пакет java.lang встроен класс, инкапсулирующий структуру данных, соответствующую строке. Класс.
Символы и строки. Процедуры и функции работы со строками.
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
СТРОКОВЫЙ ТИП ДАННЫХ Строка это последовательность символов. Каждый символ занимает 1 байт памяти ( код ASCII). Количество символов в строке называется.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Строки символов Строка в Паскале – упорядоченная последовательность символов. Количество символов в строке называется ее длиной. Длина строки в Паскале.
Основы программирования. Типы данных Учебное пособие по курсу «Основы программирования» Преподаватель Алексеева Н.Н. Санкт-Петербургский колледж информационных.
Объектно-ориентированный язык программирования. Переменная - эта поименованная ячейка памяти, хранящая какое-либо одно значение (одно число, один фрагмент.
Строки и классы-оболочки. Класс String. Конструкторы String s = new String(); char chars[] = { 'а', 'b', 'с' }; String s = new String(chars); char chars[]
Тип, имя и значение переменной.. Переменные. В объектно-ориентированных языках программирования, и в частности в языке Visual Basic, переменные играют.
Тип, имя и значение переменной. В объектно-ориентированных языках программирования переменные играют такую же важную роль, как и в процедурных языках.
Строки в C#. Основные концепции Для представления строкой информации в.NET существует класс System.String. У него есть псевдоним string, для которого.
Познакомиться с основными принципами работы с символьными величинами Научиться применять процедуры и функции для их обработки.
Операции над строками. Тип данных (string) определяет строки с максимальной длиной 255 символов. Переменная этого типа может принимать значения переменной.
Строки в Pascal
Строки в С#. Отдельные символы, чаще всего, его называют типом Char. Строки постоянной длины, часто они представляются массивом символов Char[]. Строки.
Транксрипт:

1 Java 7. ОБРАБОТКА СТРОК

2 Строка в языке Java Строка в языке Java – (основной носитель текстовой информации) НЕ МАССИВ символов типа char, А ОБЪЕКТ соответствующего класса. Для работы со строками системная библиотека java.lang содержит классы (объявленные как final) String StringBuilder StringBuffer Для форматирования и обработки строк применяются классы Formatter Pattern Matcher и др.

3 Изменение значения объекта String Каждая строка, создаваемая с помощью оператора new или с помощью литерала является объектом класса String. String str = new String(); String lit = объект инициализируется значением литерала; Значение объекта класса String не может быть изменено после создания объекта при помощи какого-либо метода класса. Любое изменение строки приводит к созданию нового объекта. Ссылку на объект класса String можно изменить так, чтобы она указывала на другой объект и тем самым на другое значение. example01 : передача строки по ссылке RefString.java

4 Конструкторы класса String String() String(String str) String(byte asciichar[ ]) String(char[ ] unicodechar) String(StringBuffer sbuf) String(StringBuilder sbuild) и др. Пример: new String(str.getChars(), "UTF-8")

5 Класс String: методы для работы со строками (1) String concat(String s) + слияние строк boolean equals(Object ob) boolean equalsIgnoreCase(String s) сравнение строк с учетом и без учета регистра соответственно int compareTo(String s) Int compareToIgnoreCase(String s) лексикографическое сравнение строк с учетом и без учета регистра метод осуществляет вычитание кодов символов вызывающей и передаваемой в метод строк и возвращает целое значение метод возвращает значение нуль в случае, когда equals() возвращает значение true

6 Класс String: методы для работы со строками (2) boolean contentEquals(StringBuffer ob) сравнение строки и содержимого объекта типа StringBuffer String substring(int n, int m) извлечение из строки подстроки длины m-n, начиная с позиции n ( нумерация символов в строке начинается с нуля) int length() определение длины строки boolean isEmpty() возвращает true, если длина строки равна 0 int indexOf(char ch) определение позиции символа в строке static String valueOf(значение) преобразование переменной базового типа к строке

7 Класс String: методы для работы со строками (3) String toUpperCase() String toLowerCase() преобразование всех символов вызывающей строки в верхний/нижний регистр String replace(char с1, char с2) замена в строке всех вхождений первого символа вторым символом String intern() заносит строку в пул литералов и возвращает ее объектную ссылку String trim() удаление всех пробелов в начале и конце строки char charAt(int position) возвращение символа из указанной позиции (нумерация с нуля)

8 Класс String: методы для работы со строками (4) byte[ ] getBytes() getChars(int srcBegin, int srcEnd, char[ ] dst, int dstBegin) извлечение символов строки в массив байт или символов static String format(String format, Object... args) static String format(Locale l, String format, Object... args) генерирует форматированную строку, полученную с использованием формата, интернационализации и др. String[ ] split(String regex) String[ ] split(String regex, int limit) поиск вхождения в строку заданного регулярного выражения (разделителя) и деление исходной строки в соответствии с этим на массив строк example02 : применение некоторых методов DemoString.java

9 Особенности хранения и идентификации объектов в Java все ссылки хранятся в стеке, а объекты - в куче, строковые литералы сохраняются в пуле строк. В пул строк кладутся все строковые литералы, объявленные в коде. При совпадении литералов (в смысле equals ) используется один и тот же объект, находящийся в пуле. Строку в пул можно поместить принудительно, с помощью метода String.intern() Этот метод возвращает из пула строку, равную той, у которой был вызван этот метод. Если же такой строки нет – в пул кладется та, у которой вызван метод, после чего возвращается ссылка на нее же. example03 : сравнение ссылок и объектов EqualStrings.java применение intern() DemoIntern.java

10 Сравнение с литералами В конструкции типа str.equals("abc") есть недостаток – возможность получить NullPointerException Избежать его можно: str != null && str.equals("abc") Другой способ: "abc".equals(str)

11 Сложение строк Для строк определена операция сложения ссылок. Поскольку объект класса строки неизменяем, то результатом сложения str1 = str1 + str2 будет новый объект: выделяется память, достаточная для того, чтобы вместить туда содержимое обеих строк str1 и str2. в эту память копируется содержимое сначала первой строки str1, потом второй str2. затем переменной str1 присваивается ссылка на новую строку, а старая строка отбрасывается. Для файла с длиной строки 80 символов, в котором 1000 строк (80кб) при сложении всех строк в цикле первая строка будет скопирована в памяти 1000 раз, вторая – 999 и т.д. И при средней длине 80 символов через память пройдет (( ) * 1000 / 2) * 80 = символов, что составляет около 80 Мб (!!!) памяти. НИКОГДА не используйте прямую конкатенацию строк, особенно в циклах by.alerof.demoStringMerge

12 Выборка подстроки и копирующий конструктор Класс java.lang.String содержит в себе три поля: private final char value[ ]; private final int offset; private final int count; String str = Java2EnterpriseEdition; str = str.substring(5,10); Для увеличения скорости при выборке подстроки используется ТОТ ЖЕ МАССИВ, что и в исходной строке. String str = Java2EnterpriseEdition; str = new String(str.substring(5,10)); value [J,a,v,a,2,E,n,t,e,r,p,r, …] offset = 5 count = 5 value [E,n,t,e,r][E,n,t,e,r] offset = 0 count = 5

13 Классы StringBuilder и StringBuffer Cодержимое и размеры объектов классов StringBuilder и StringBuffer можно изменять. StringBuilder – более быстрый в обработке StringBuffer – потокобезопасен Объекты классов StringBuffer, StringBuilder и String можно преобразовывать друг в друга. Конструктор класса StringBuffer (также как и StringBuilder ) может принимать в качестве параметра объект String или неотрицательный размер буфера.

14 StringBuilder и StringBuffer : основные методы (1) void setLength(int n) установка размера буфера void ensureCapacity(int minimum) установка гарантированного минимального размера буфера int capacity() возвращение текущего размера буфера StringBuffer append(параметры) добавление к содержимому объекта строкового представления аргумента, который может быть символом, значением базового типа, массивом и строкой StringBuffer insert(параметры) вставка символа, объекта или строки в указанную позицию

15 StringBuilder и StringBuffer : основные методы (2) StringBuffer deleteCharAt(int index) удаление символа StringBuffer delete(int start, int end) удаление подстроки StringBuffer reverse() обращение содержимого объекта replace(), substring(), charAt(), length(), getChars(), indexOf() и др. методы, аналогичные методам класса String example04 : свойства объекта StringBuffer DemoStringBuffer.java изменение объекта StringBuffer: RefStringBuffer.java

16 Сравнение объектов StringBuilder и StringBuffer Для класса StringBuilder и StringBuffer НЕ переопределены методы equals() и hashCode() Хэш-коды всех объектов этого типа вычисляются так же, как и для класса Object. example05 : сравнение объектов StringBuffer и их хэш-кодов EqualsStringBuffer.java

17 Форматирование строк Класс java.util.Formatter обеспечивает преобразование формата, позволяющее выводить числа, строки, время и даты в любом необходимом разработчику виде. Метод format() – преобразует переданные в него параметры в строку заданного формата и сохраняет в объекте типа Formatter У классов PrintStream и PrintWriter объявлен метод printf() с параметрами идентичными параметрам метода format(), который осуществляет форматированный вывод в поток

18 Спецификаторы формата %aШестнадцатеричное значение с плавающей точкой %bЛогическое (булево) значение аргумента %cСимвольное представление аргумента %dДесятичное целое значение аргумента %hХэш-код аргумента %eЭкспоненциальное представление аргумента %fДесятичное значение с плавающей точкой %gВыбирает более короткое представление из двух: %е или %f %oВосьмеричное целое значение аргумента %nВставка символа новой строки %sСтроковое представление аргумента %tВремя и дата %xШестнадцатеричное целое значение аргумента %Вставка знака % example06: SimpleFormatString, FormatterDemoNumber

19 Cпецификаторы для форматирования даты и времени Все спецификаторы для форматирования даты и времени могут употребляться только для типов long Long Calendar Date

20 Cпецификатор формата Выполняемое преобразование %tHЧас (00 – 23) %tIЧас (1 – 12) %tMМинуты как десятичное целое (00 – 59) %tSСекунды как десятичное целое (00 – 59) %tLМиллисекунды (000 – 999) %tYГод в четырехзначном формате %tyГод в двузначном формате (00 – 99) %tBПолное название месяца (Январь) %tb или %thКраткое название месяца (янв) %tmМесяц в двузначном формате (1 – 12) %tAПолное название дня недели (Пятница) %taКраткое название дня недели (Пт) %tdДень в двузначном формате (1 – 31)

21 Cпецификатор формата Выполняемое преобразование %tRТо же что и "%tH:%tM" %tTТо же что и "%tH:%tM:%tS" %trТо же что и "%tI:%tM:%tS %Tp" где %Tp = (AM или PM) %tDТо же что и "%tm/%td/%ty" %tFТо же что и "%tY–%tm–%td" %tcТо же что и "%ta %tb %td %tT %tZ %tY" example07 : форматирование даты и времени: FormatterDemoTimeAndDate.java

22 Спецификатор точности Спецификатор точности применяется только в спецификаторах формата %f, %е, %g для данных с плавающей точкой и в спецификаторе %s – для строк. Задает количество выводимых десятичных знаков или символов. Например %10.4f выводит число с минимальной шириной поля 10 символови с четырьмя десятичными знаками. Принятая по умолчанию точность равна шести десятичным знакам. Примененный к строкам спецификатор точности задает максимальную длину поля вывода. Например, %5.7s выводит строку длиной не менее пяти и не более семи символов. Если строка длиннее, конечные символы отбрасываются. example08: применение флагов форматирования: FormatterDemoFlags.java

23 Соответствие между спецификаторами и аргументами По умолчанию соответствие между спецификаторами и аргументами, на которые они воздействуют, устанавливается в соответствии с порядком их следования, слева направо. Используя порядковый номер или индекс аргумента, можно указать явное соответствие спецификатора формата аргументу. Порядковый номер аргумента указывается за знаком % в спецификаторе формата и имеет следующий формат: N$. Символ N обозначает порядковый номер нужного аргумента, нумерация аргументов начинается с единицы. example09: применение порядкового номера аргумента: FormatterDemoArguments.java

24 Ключевые моменты Строка в языке Java – НЕ МАССИВ символов, а ОБЪЕКТ Строковые литералы сохраняются в пуле строковых литералов ( String.intern() ) Для строк переопределены методы equals() и hashCode(), и возможно сравнение по ссылке с использованием пула литералов Любое изменение строки приводит к созданию нового объекта: НИКОГДА не используйте прямое сложение строк, особенно в циклах Для увеличения скорости при выборке подстроки используется ТОТ ЖЕ МАССИВ, что и в исходной строке. Cодержимое и размеры объектов классов StringBuilder и StringBuffer можно изменять Для классов StringBuilder и StringBuffer не переопределены методы equals() и hashCode() Для форматирования строк используется класс java.util.Formatter