SlideShare a Scribd company logo
Строки.
Виталий Унгурян
unguryan@itstep.org
Цитаты великих
Моя кошка замечательно разбирается
в программировании. Стоит мне
объяснить ей проблему - и все
становится ясно.
John Robbins,
Debugging Applications,
Microsoft Press, 2000
String
String – это класс для работы с
строками. По сути String является
обёрткой над массивом символов.
Объекты класса String являются
неизменяемыми.
Поэтому, всегда когда вам кажется,
что вы меняете строку, на самом
деле вы создаёте новую строку.
String
String – это ссылочные тип
данных.
Это значит, что в переменной храниться
не значение, а только лишь ссылка
(адрес) на данные в оперативной
памяти.
null
null — это ссылка на объект,
который еще или уже не
существует.
Энтони Хоар, человек
который ввёл в употребление
понятие null-указатель считает
это ошибкой на миллиард
долларов.
Строковый литерал
Строковый литерал —
последовательность символов
заключенных в двойные кавычки.
Важно понимать, что всегда когда
вы первый раз используете
строковой литерал, компилятор
создает объект со значением этого
литерала.
escape-последовательности
n – перевод строки
u0410 – юникод кодировка
t – горизонтальная табуляция
r – возврат каретки
f – перевод страницы
ʺ – двойная ковычка
 – обратная косая черта
` – апостроф
b – забой (backspace)
Устройство строки
public final class String{
private final char value[];
private final int offset;
private final int count;
}
Операторы + и += для String
String cat = "Кот";
String name = "Васька";
// складываем две строки и пробел
между ними, чтобы слова не слиплись
String fullname = cat + " " + name;
// получится Кот Васька
Усы, лапы и хвост.
Если в выражении объеденяется
тип String и значения примитивных
типов, то значения примитивных типов
автоматически приводятся к строчному
виду.
String aboutСat = paws + 4 + 4;
public int length()
Метод length - возвращает
длину строки.
String testString = "kitten";
int length = testString.length();
System.out.pribtln(lenght);
public String concat (String string)
Метод concat - создает новую строку
объединяя строку с другой строкой.
Метод выполняет ту же функцию,
что и оператор + и можно было
написать "Сук" + "кот".
public boolean isEmpty ()
Метод isEmpty() – возвращает true если
в строке нет символов (пустая строка).
String catname = "";
if (catname.isEmpty()) {
System.out.println("Котов нет, печалька");
}
public char charAt (int index)
Метод charAt(индекс) - возвращает
символ по указанному индексу в
этой строке.
Отсчёт смещения идёт с 0.
String testString = "Котёнок";
char myChar = testString.charAt(2);
public boolean contains (CharSequence cs)
Метод contains(подстрока)
– возвращает истину если
строка, содержит
последовательность
символов указаных в
подстроке.
public boolean startsWith(String prefix)
Метод starsWith(подстрока)
– возвращает true если
строка начинается с
указанной
последовательности
символов.
public boolean endsWith(String suffix)
Метод
endsWith(подстрока)
возврашает истину если
строка заканчивается
символами подстроки.
public boolean equals (Object string)
Метод equals(строка) –
возвращает возвращает true,
если сравниваемые строки
равны, т.е. содержит те же
символы и в том же порядке с
учётом регистра.
public boolean equalsIgnoreCase(String string)
Метод
equalsIgnoreCase(строка)
возвращает true, если строки
равны без учета регистра.
Диапазон A-Z считается равным
диапазону a-z.
String pool
Пул строк
Пул строк хранится в области памяти
«Perm Gen», которая зарезервирована
для non-user объектов JVM
(метоинформация).
Если этого не учитывать, вы можете
неожиданно получить OutOfMemory
Error.
intern()
1) Создать множество (hash set) строк
2) Проверить, что строка (как
последовательность символов), с которой вы
имеете дело, уже в множестве;
3) Если да, то использовать строку из
множества;
4) В противном случае, добавить эту строку в
множество и затем использовать ее;
Пул строк
Интернированные строки не
хранятся вечно. Строки, на которых
нет ссылок, также удаляются
сборщиком мусора из пула строк.
Пул строк
В большинстве случаев вы не получите
существенного прироста
производительности от использования
intern() — если сравнение строк не
является основной (или очень частой)
операцией вашего приложения и
сравниваемые строки разные по длине.
public int compareTo(String string)
Метод compareTo(строка) -
возвращает 0 если строки
идентичны иначе
положительное или
отрицательное число.
Используется для сортировки
строк.
substring(start)
Метод substring(start) -
возвращает новую строку
с символами из данной
строки начиная с позиции
start до конца строки.
substring(start)
Метод substring(start, end) -
возвращает новую строку с символами
из данной строки начиная с позиции
start и заканчивая символом с позиции
end - 1.
Новая строка содержит символы от
start до end - 1.
indexOf
Метод indexOf(подстрока) -
возвращает номер индекса первого
найденого совпадаени с подстрокой.
Метод indexOf(подстрока, индекс
начала поиска) - возвращает номер
индекса первого найденого совпадения,
начиная поиск с указаного индекса.
lastIndexOf
Метод lastIndexOf(подстрока) -
возвращает номер позиции в которой
найдена подстрока, поиск начинается с
конца строки.
Например, получить имя файла без
расширения можно так:
int index = “readme.txt”.lastIndexOf("."));
toLowerCase()
Метод toLowerCase() –
возвращает новую строку в
которой все символы
преобразованы в нижний
регистр. Преобразованием
управляет заданный по
умолчанию региональный язык.
toUperCase()
Метод toUperCase() –
возвращает новую строку в
которой все символы
преобразованы в верхний
регистр. Преобразованием
управляет заданный по
умолчанию региональный язык.
replace()
Метод replace(строка,
подстрока) – возвращает
новую строку в которой
все символы строки
заменены на подстроку.
trim()
Метод trim() – возвращает
новую строку в которой
удалены начальные и
конечные пробелы в
строке.
Не удаляет пробелы между не пробельными
символами.
toString()
String upperCat = upperCat.toString ();
Возвращает строку. 
public byte[] getBytes(String charsetName)
Возвращает отформатированную
строку в виде массива байт, используя
прилагаемый формат.
split()
Метод split(разделитель) -
возвращает массив строк,
которые были получены из
исходной строки с
помошью разделителя.
Статические методы String
Статические методы
Статические методы класса String
можно вызывать без создания
экземпляра строки, используя
только имя класса.
Пример:
String five = String.valueOf(5);
valueOf
Метод valueOf() –
преобразует содержимое
(примитивные типы,
объекты, массивы символов)
в строку.
String five = String.valueOf(5);
Форматер
Метод format(шаблон,
аргументы) – возвращает
новую строку формируя ее на
основе шаблона, указаного в
параметрах метода используя
спецификаторы формата и
аргументы метода.
Спецификатор формата
В простейшей форме спецификатор
формата начинается с символа
процента, за которым следует
спецификатор конверсии формата.
Все спецификаторы состоят из
единственного символа. Например,
спецификатор формата для числа с
плавающей точкой выглядит как %f.
Форматер
Общее количество фактических
аргументов в методе format
должно совпадать со
спецификаторами формата, и
сопоставляются они друг с
другом слева направо.
Спецификаторы формата
%a Шестнадцатеричное значение с плавающей точкой
%b Логическое (булево) значение аргумента
%c Символьное представление аргумента
%d Десятичное целое значение аргумента
%h Хэш-код аргумента
%e Экспоненциальное представление аргумента
%f Десятичное значение с плавающей точкой
%g Выбирает более короткое представление из двух:
%е или %f
Спецификаторы формата
%o Восьмеричное целое значение аргумента
%n Вставка символа новой строки
%s Строковое представление аргумента
%t Время и дата
%x Шестнадцатеричное целое значение аргумента
%% Вставка знака %
Так же возможны спецификаторы с заглавными буквами:
%A (эквивалентно %a). Форматирование с их помощью
обеспечивает перевод символов в верхний регистр.
Регулярные выражаения
Некоторые люди, столкнувшись с
проблемой, думают: «О, а использую
ка я регулярные выражения для
решение этой проблемы».
Теперь у меня есть две проблемы!
Джейми Завински
Регулярные выражаения
(англ. regular
expressions, жарг. , ,
регулярки) — система обработки
текста, основанная на специальной
системе записи образцов для поиска.
Образец (англ. pattern), задающий
правило поиска, по-русски также иногда
называют «шаблоном», «маской».
Регулярные выражаения
Регулярные выражения
одновременно очень странные и
крайне полезные, но не смотря на то,
что их синтаксис загадочен - это
мощный инструмент для
исследования и обработки строк.
Разобравшись с ними, вы станете
более эффективным программистом.
Регулярные выражения
Метасимволы - это
специальные символы,
являющиеся важнейшим
понятием в регулярных
выражениях.
Существует несколько групп
метасимволов.
Регулярные выражения
Метасимволы - разделители строк
^ начало строки
$ конец строки
A начало текста
Z конец текста
. любой символ в строке
Регулярные выражения
Метасимволы - стандартные перечни
символов
w буквенно-цифровой символ или "_"
W не w
d цифровой символ
D не d
s любой "пробельный" символ (по
умолчанию - [ tnrf])
S не s
Регулярные выражения
* ноль или более раз ("жадный"), то же
что {0,}
+ один или более раз ("жадный"), то же
что {1,}
? ноль или один раз ("жадный"), то же
что {0,1}
{n} точно n раз ("жадный")
{n,} не менее n раз ("жадный")
Регулярные выражения
{n,m} не менее n но не более m раз
("жадный")
*? ноль или более раз ("не жадный"), то
же что {0,}?
+? один или более раз ("не жадный"),
то же что {1,}?
?? ноль или один раз ("не жадный"), то
же что {0,1}?
Регулярные выражения
{n}? точно n раз ("не жадный")
{n,}? не менее n раз ("не жадный")
{n,m}? не менее n но не более m раз
("не жадный")
Регулярные выражения
Метасимволы — повторения.
После любого элемента регулярного
выражения может следовать очень
важный тип метасимвола - повторитель.
Используя их Вы можете определить
число допустимых повторений
предшествующего символа,
метасимвола или подвыражения.
Регулярные выражения
public boolean matches(String
regularExpression)
Проверяет, соответствует ли строка
регулярным выражениям.
public boolean regionMatches (int thisStart,
String string, int start, int length)
Метод сравнивает указанную часть строки с
другой частью строки.
public String replace()
Метод replaceAll(регэксп,
replacement) -меняет символ или
последовательность символов
target на replacement
StringBuffer
Существует четыре конструктора класса:
 StringBuffer() - резервирует место под 16 символов
без перераспределения памяти
 StringBuffer(int capacity) - явно устанавливает
размер буфера
 StringBuffer(String string) - устанавливает
начальное содержимое и резервирует 16 символов
без повторого резервирования
 StringBuffer(CharSequence cs) - создаёт объект,
содержащий последовательность символов и
резервирует место ещё под 16 символов
Методы класса StringBuffer
length() - метод позволяет получить
текущую длину объекта.
capacity() - метод позволяет получить
текущий объём выделенной памяти.
setLength(int length) - устанавливает
длину строки. Значение должно быть
неотрицательным.
Методы класса StringBuffer
append() - метод добавляет в буффер
строчное представление любого
другого типа данных.
StringBuffer sb = new StringBuffer() ;
sb.append(“cat”). append(5);
Методы класса StringBuffer
Метод insert(данные,
индекс) - вставляет
данные в буфер с
указанного индекса.
Методы класса StringBuffer
Метод reverse() –
изменяет порядок
символов в буфере на
противоположный.
Методы класса StringBuffer
Метод delete(индекс) -
удаляет последовательность
символов из буфера, начиная
с индекса.
Метод deleteCharAt(индекс)
удаляет один символ по
указанному индексу.
Методы класса StringBuffer
Метод replace() - зааменяет
один набор символов на
другой.
Нужно указать начальный и
конечный индекс и строку
замены.
StringBuilder
Класс StringBuilder идентичен
классу StringBuffer, но обладает
большей производительностью.
StringBuilder не синхронизирован,
поэтому не желательно
использовать его в тех случаях,
когда к буферу обращаются из
несколько потоков.
Java String Tokenizer
Класс java.util.StringTokenizer
предназначен непосредственно для
разбиения входящей строки на слова
(токены).
Java String Tokenizer
Метод nextToken() возвращает в виде
строки следующее слово;
логический метод hasMoreTokens
() возвращает true , если в строке ещё
есть слова, и false , если слов больше
нет.
Третий метод countTokens
() возвращает число оставшихся слов.
String immutable
Конструкцией языка (Design).
Строки создаются в специальной
области памяти в Java куче, известной
как "String Intern pool". Если строку
можно было бы изменить, работа
строкового пула была бы не возможна.
Почему строки не изменяемые?
Почему же строки
являются
немизменяемым
объектом в java?
String immutable
Безопасность (Security ).
Строки широко используются в качестве
параметров для открытия файлов и
соединений к базам данных, подключения к
сетевым ресурсам, в качестве паролей и т.д.
Если бы строку можно было бы изменить во
всех этих случаях - это бы привило к
серьезным угрозам безопасности программы
и данных.
String immutable
Эффективность (Efficiency).
Хэш-код строки часто используется в java в
качестве ключа, например в реализации
ассоциативного массива java.util.HashMap.
Неизменяемость строки гарантирует нам, что
ее хэш-код всегда будет одинаковым, что
позволяет рассчитывать хэш-код один раз,
во время создания строки, что при частом
использовании существенно ускоряет работу
с строками.

More Related Content

What's hot

Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.
Unguryan Vitaliy
 
Java. Введение в коллекции. Классы обертки. Перечисленияю
Java. Введение в коллекции. Классы обертки.  ПеречисленияюJava. Введение в коллекции. Классы обертки.  Перечисленияю
Java. Введение в коллекции. Классы обертки. Перечисленияю
Unguryan Vitaliy
 
Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.
Unguryan Vitaliy
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8
Stfalcon Meetups
 
Java. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операцииJava. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операции
Unguryan Vitaliy
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture libraryMERA_school
 
Java. Сборщик мусора. Работа с памятью.
Java.  Сборщик мусора. Работа с памятью. Java.  Сборщик мусора. Работа с памятью.
Java. Сборщик мусора. Работа с памятью.
Unguryan Vitaliy
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в java
Unguryan Vitaliy
 
Java. Generic - шаблонные типы.
Java.  Generic - шаблонные типы.Java.  Generic - шаблонные типы.
Java. Generic - шаблонные типы.
Unguryan Vitaliy
 
Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибки
Unguryan Vitaliy
 
Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.
Unguryan Vitaliy
 
5. java lecture io
5. java lecture io5. java lecture io
5. java lecture ioMERA_school
 
Java. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередьJava. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередь
Unguryan Vitaliy
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.
Unguryan Vitaliy
 

What's hot (14)

Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.
 
Java. Введение в коллекции. Классы обертки. Перечисленияю
Java. Введение в коллекции. Классы обертки.  ПеречисленияюJava. Введение в коллекции. Классы обертки.  Перечисленияю
Java. Введение в коллекции. Классы обертки. Перечисленияю
 
Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.Java. Интерфейс Set - наборы (множества) и его реализации.
Java. Интерфейс Set - наборы (множества) и его реализации.
 
Discovering Lambdas in Java 8
Discovering Lambdas in Java 8Discovering Lambdas in Java 8
Discovering Lambdas in Java 8
 
Java. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операцииJava. Cистемы счислния, битовые операции
Java. Cистемы счислния, битовые операции
 
9. java lecture library
9. java lecture library9. java lecture library
9. java lecture library
 
Java. Сборщик мусора. Работа с памятью.
Java.  Сборщик мусора. Работа с памятью. Java.  Сборщик мусора. Работа с памятью.
Java. Сборщик мусора. Работа с памятью.
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в java
 
Java. Generic - шаблонные типы.
Java.  Generic - шаблонные типы.Java.  Generic - шаблонные типы.
Java. Generic - шаблонные типы.
 
Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибки
 
Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.Java. Работа с файловой системой. Потоки ввода-вывода.
Java. Работа с файловой системой. Потоки ввода-вывода.
 
5. java lecture io
5. java lecture io5. java lecture io
5. java lecture io
 
Java. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередьJava. Интерфейс Queue - очередь
Java. Интерфейс Queue - очередь
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.
 

Viewers also liked

Java. Инкапсуляция.
Java. Инкапсуляция.Java. Инкапсуляция.
Java. Инкапсуляция.
Unguryan Vitaliy
 
Java. Циклы.
Java. Циклы.Java. Циклы.
Java. Циклы.
Unguryan Vitaliy
 
Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация
Unguryan Vitaliy
 
An Introduction to JVM Internals and Garbage Collection in Java
An Introduction to JVM Internals and Garbage Collection in JavaAn Introduction to JVM Internals and Garbage Collection in Java
An Introduction to JVM Internals and Garbage Collection in Java
Abhishek Asthana
 
Java. Интерфейс Reference - типы ссылок
Java. Интерфейс Reference -  типы ссылокJava. Интерфейс Reference -  типы ссылок
Java. Интерфейс Reference - типы ссылок
Unguryan Vitaliy
 
Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.
Unguryan Vitaliy
 
Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.
Unguryan Vitaliy
 
Java. Наследование.
Java. Наследование.Java. Наследование.
Java. Наследование.
Unguryan Vitaliy
 

Viewers also liked (9)

Java. Инкапсуляция.
Java. Инкапсуляция.Java. Инкапсуляция.
Java. Инкапсуляция.
 
Java. Циклы.
Java. Циклы.Java. Циклы.
Java. Циклы.
 
Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация Java. Конструкторы класса и инициализация
Java. Конструкторы класса и инициализация
 
An Introduction to JVM Internals and Garbage Collection in Java
An Introduction to JVM Internals and Garbage Collection in JavaAn Introduction to JVM Internals and Garbage Collection in Java
An Introduction to JVM Internals and Garbage Collection in Java
 
Java. Интерфейс Reference - типы ссылок
Java. Интерфейс Reference -  типы ссылокJava. Интерфейс Reference -  типы ссылок
Java. Интерфейс Reference - типы ссылок
 
Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.Java. Логические операторы, операторы ветвления.
Java. Логические операторы, операторы ветвления.
 
Uml
UmlUml
Uml
 
Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.Java. Вложенные классы и интерфейсы.
Java. Вложенные классы и интерфейсы.
 
Java. Наследование.
Java. Наследование.Java. Наследование.
Java. Наследование.
 

Similar to Java. Строки. Класс String.

Regular Expressions
Regular ExpressionsRegular Expressions
Regular Expressions
Alexey Bovanenko
 
Module 5 1
Module 5 1Module 5 1
Module 5 1
kairbekov
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularitiesmcroitor
 
Обзор Ruby
Обзор RubyОбзор Ruby
C++ Базовый. Занятие 12.
C++ Базовый. Занятие 12.C++ Базовый. Занятие 12.
C++ Базовый. Занятие 12.
Igor Shkulipa
 
07 string
07 string07 string
07 string
pogromskaya
 
элементы языка и типы данных
элементы языка и типы данныхэлементы языка и типы данных
элементы языка и типы данныхЕлена Ключева
 
Линейные коды
Линейные кодыЛинейные коды
Линейные коды
Alex Dainiak
 
Автоматическое извлечение синтаксических контекстов из текстовой коллекции
Автоматическое извлечение синтаксических контекстов из текстовой коллекцииАвтоматическое извлечение синтаксических контекстов из текстовой коллекции
Автоматическое извлечение синтаксических контекстов из текстовой коллекции
Спецсеминар "Искусственный Интеллект" кафедры АЯ ВМК МГУ
 
тема множество для загрузки 2013
тема множество для загрузки 2013тема множество для загрузки 2013
тема множество для загрузки 2013AliyaAringazinova
 
Базы данных лекция №5
Базы данных лекция №5Базы данных лекция №5
Базы данных лекция №5
Vitaliy Pak
 
Msu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing JavaMsu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing Javaolegol
 
Об одном методе автоматической транскрипции
Об одном методе автоматической транскрипцииОб одном методе автоматической транскрипции
Об одном методе автоматической транскрипции
Спецсеминар "Искусственный Интеллект" кафедры АЯ ВМК МГУ
 
Classes: Number, String, StringBuffer, StringBuilder
Classes: Number, String, StringBuffer, StringBuilderClasses: Number, String, StringBuffer, StringBuilder
Classes: Number, String, StringBuffer, StringBuilder
Alexey Bovanenko
 
Ruby строки
Ruby строкиRuby строки
Ruby строки
Evgeny Smirnov
 

Similar to Java. Строки. Класс String. (20)

Regular Expressions
Regular ExpressionsRegular Expressions
Regular Expressions
 
Module 5 1
Module 5 1Module 5 1
Module 5 1
 
Cpp/cli particularities
Cpp/cli particularitiesCpp/cli particularities
Cpp/cli particularities
 
лек7
лек7лек7
лек7
 
лек7
лек7лек7
лек7
 
лек8
лек8лек8
лек8
 
Обзор Ruby
Обзор RubyОбзор Ruby
Обзор Ruby
 
C++ Базовый. Занятие 12.
C++ Базовый. Занятие 12.C++ Базовый. Занятие 12.
C++ Базовый. Занятие 12.
 
07 string
07 string07 string
07 string
 
элементы языка и типы данных
элементы языка и типы данныхэлементы языка и типы данных
элементы языка и типы данных
 
ООП_лекция_11
ООП_лекция_11ООП_лекция_11
ООП_лекция_11
 
Линейные коды
Линейные кодыЛинейные коды
Линейные коды
 
Автоматическое извлечение синтаксических контекстов из текстовой коллекции
Автоматическое извлечение синтаксических контекстов из текстовой коллекцииАвтоматическое извлечение синтаксических контекстов из текстовой коллекции
Автоматическое извлечение синтаксических контекстов из текстовой коллекции
 
тема множество для загрузки 2013
тема множество для загрузки 2013тема множество для загрузки 2013
тема множество для загрузки 2013
 
Базы данных лекция №5
Базы данных лекция №5Базы данных лекция №5
Базы данных лекция №5
 
Msu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing JavaMsu.Center.Lectures.J01 Introducing Java
Msu.Center.Lectures.J01 Introducing Java
 
Об одном методе автоматической транскрипции
Об одном методе автоматической транскрипцииОб одном методе автоматической транскрипции
Об одном методе автоматической транскрипции
 
Classes: Number, String, StringBuffer, StringBuilder
Classes: Number, String, StringBuffer, StringBuilderClasses: Number, String, StringBuffer, StringBuilder
Classes: Number, String, StringBuffer, StringBuilder
 
Ruby строки
Ruby строкиRuby строки
Ruby строки
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 

More from Unguryan Vitaliy

Модульное тестирование.
Модульное тестирование. Модульное тестирование.
Модульное тестирование.
Unguryan Vitaliy
 
Архитектурный шаблон MVC
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVC
Unguryan Vitaliy
 
Работа в команде, управление программными проектами
Работа в команде, управление программными проектамиРабота в команде, управление программными проектами
Работа в команде, управление программными проектами
Unguryan Vitaliy
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версий
Unguryan Vitaliy
 
Принципы SOLID
Принципы SOLIDПринципы SOLID
Принципы SOLID
Unguryan Vitaliy
 
Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.
Unguryan Vitaliy
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»
Unguryan Vitaliy
 
Шаблоны проектирования GoF
Шаблоны проектирования GoFШаблоны проектирования GoF
Шаблоны проектирования GoF
Unguryan Vitaliy
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernate
Unguryan Vitaliy
 
Spring AOP
Spring AOPSpring AOP
Spring AOP
Unguryan Vitaliy
 
Введение в Spring
Введение в SpringВведение в Spring
Введение в Spring
Unguryan Vitaliy
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSP
Unguryan Vitaliy
 
JSTL
JSTLJSTL
JSP
JSPJSP
JDBC
JDBCJDBC
Сервлеты
СервлетыСервлеты
Сервлеты
Unguryan Vitaliy
 
Сетевое взаимодействие
Сетевое взаимодействиеСетевое взаимодействие
Сетевое взаимодействие
Unguryan Vitaliy
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологии
Unguryan Vitaliy
 
XML
XMLXML
Рефлексия в java
Рефлексия в javaРефлексия в java
Рефлексия в java
Unguryan Vitaliy
 

More from Unguryan Vitaliy (20)

Модульное тестирование.
Модульное тестирование. Модульное тестирование.
Модульное тестирование.
 
Архитектурный шаблон MVC
Архитектурный шаблон MVCАрхитектурный шаблон MVC
Архитектурный шаблон MVC
 
Работа в команде, управление программными проектами
Работа в команде, управление программными проектамиРабота в команде, управление программными проектами
Работа в команде, управление программными проектами
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версий
 
Принципы SOLID
Принципы SOLIDПринципы SOLID
Принципы SOLID
 
Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.Парадигма объектно-ориентированного программирования.
Парадигма объектно-ориентированного программирования.
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»
 
Шаблоны проектирования GoF
Шаблоны проектирования GoFШаблоны проектирования GoF
Шаблоны проектирования GoF
 
Введение в hibernate
Введение в hibernateВведение в hibernate
Введение в hibernate
 
Spring AOP
Spring AOPSpring AOP
Spring AOP
 
Введение в Spring
Введение в SpringВведение в Spring
Введение в Spring
 
Cookies, session и другое в JSP
Cookies, session и другое в JSPCookies, session и другое в JSP
Cookies, session и другое в JSP
 
JSTL
JSTLJSTL
JSTL
 
JSP
JSPJSP
JSP
 
JDBC
JDBCJDBC
JDBC
 
Сервлеты
СервлетыСервлеты
Сервлеты
 
Сетевое взаимодействие
Сетевое взаимодействиеСетевое взаимодействие
Сетевое взаимодействие
 
Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологии
 
XML
XMLXML
XML
 
Рефлексия в java
Рефлексия в javaРефлексия в java
Рефлексия в java
 

Java. Строки. Класс String.

  • 2. Цитаты великих Моя кошка замечательно разбирается в программировании. Стоит мне объяснить ей проблему - и все становится ясно. John Robbins, Debugging Applications, Microsoft Press, 2000
  • 3. String String – это класс для работы с строками. По сути String является обёрткой над массивом символов. Объекты класса String являются неизменяемыми. Поэтому, всегда когда вам кажется, что вы меняете строку, на самом деле вы создаёте новую строку.
  • 4. String String – это ссылочные тип данных. Это значит, что в переменной храниться не значение, а только лишь ссылка (адрес) на данные в оперативной памяти.
  • 5. null null — это ссылка на объект, который еще или уже не существует. Энтони Хоар, человек который ввёл в употребление понятие null-указатель считает это ошибкой на миллиард долларов.
  • 6. Строковый литерал Строковый литерал — последовательность символов заключенных в двойные кавычки. Важно понимать, что всегда когда вы первый раз используете строковой литерал, компилятор создает объект со значением этого литерала.
  • 7. escape-последовательности n – перевод строки u0410 – юникод кодировка t – горизонтальная табуляция r – возврат каретки f – перевод страницы ʺ – двойная ковычка – обратная косая черта ` – апостроф b – забой (backspace)
  • 8. Устройство строки public final class String{ private final char value[]; private final int offset; private final int count; }
  • 9. Операторы + и += для String String cat = "Кот"; String name = "Васька"; // складываем две строки и пробел между ними, чтобы слова не слиплись String fullname = cat + " " + name; // получится Кот Васька
  • 10. Усы, лапы и хвост. Если в выражении объеденяется тип String и значения примитивных типов, то значения примитивных типов автоматически приводятся к строчному виду. String aboutСat = paws + 4 + 4;
  • 11. public int length() Метод length - возвращает длину строки. String testString = "kitten"; int length = testString.length(); System.out.pribtln(lenght);
  • 12. public String concat (String string) Метод concat - создает новую строку объединяя строку с другой строкой. Метод выполняет ту же функцию, что и оператор + и можно было написать "Сук" + "кот".
  • 13. public boolean isEmpty () Метод isEmpty() – возвращает true если в строке нет символов (пустая строка). String catname = ""; if (catname.isEmpty()) { System.out.println("Котов нет, печалька"); }
  • 14. public char charAt (int index) Метод charAt(индекс) - возвращает символ по указанному индексу в этой строке. Отсчёт смещения идёт с 0. String testString = "Котёнок"; char myChar = testString.charAt(2);
  • 15. public boolean contains (CharSequence cs) Метод contains(подстрока) – возвращает истину если строка, содержит последовательность символов указаных в подстроке.
  • 16. public boolean startsWith(String prefix) Метод starsWith(подстрока) – возвращает true если строка начинается с указанной последовательности символов.
  • 17. public boolean endsWith(String suffix) Метод endsWith(подстрока) возврашает истину если строка заканчивается символами подстроки.
  • 18. public boolean equals (Object string) Метод equals(строка) – возвращает возвращает true, если сравниваемые строки равны, т.е. содержит те же символы и в том же порядке с учётом регистра.
  • 19. public boolean equalsIgnoreCase(String string) Метод equalsIgnoreCase(строка) возвращает true, если строки равны без учета регистра. Диапазон A-Z считается равным диапазону a-z.
  • 21. Пул строк Пул строк хранится в области памяти «Perm Gen», которая зарезервирована для non-user объектов JVM (метоинформация). Если этого не учитывать, вы можете неожиданно получить OutOfMemory Error.
  • 22. intern() 1) Создать множество (hash set) строк 2) Проверить, что строка (как последовательность символов), с которой вы имеете дело, уже в множестве; 3) Если да, то использовать строку из множества; 4) В противном случае, добавить эту строку в множество и затем использовать ее;
  • 23. Пул строк Интернированные строки не хранятся вечно. Строки, на которых нет ссылок, также удаляются сборщиком мусора из пула строк.
  • 24. Пул строк В большинстве случаев вы не получите существенного прироста производительности от использования intern() — если сравнение строк не является основной (или очень частой) операцией вашего приложения и сравниваемые строки разные по длине.
  • 25. public int compareTo(String string) Метод compareTo(строка) - возвращает 0 если строки идентичны иначе положительное или отрицательное число. Используется для сортировки строк.
  • 26. substring(start) Метод substring(start) - возвращает новую строку с символами из данной строки начиная с позиции start до конца строки.
  • 27. substring(start) Метод substring(start, end) - возвращает новую строку с символами из данной строки начиная с позиции start и заканчивая символом с позиции end - 1. Новая строка содержит символы от start до end - 1.
  • 28. indexOf Метод indexOf(подстрока) - возвращает номер индекса первого найденого совпадаени с подстрокой. Метод indexOf(подстрока, индекс начала поиска) - возвращает номер индекса первого найденого совпадения, начиная поиск с указаного индекса.
  • 29. lastIndexOf Метод lastIndexOf(подстрока) - возвращает номер позиции в которой найдена подстрока, поиск начинается с конца строки. Например, получить имя файла без расширения можно так: int index = “readme.txt”.lastIndexOf("."));
  • 30. toLowerCase() Метод toLowerCase() – возвращает новую строку в которой все символы преобразованы в нижний регистр. Преобразованием управляет заданный по умолчанию региональный язык.
  • 31. toUperCase() Метод toUperCase() – возвращает новую строку в которой все символы преобразованы в верхний регистр. Преобразованием управляет заданный по умолчанию региональный язык.
  • 32. replace() Метод replace(строка, подстрока) – возвращает новую строку в которой все символы строки заменены на подстроку.
  • 33. trim() Метод trim() – возвращает новую строку в которой удалены начальные и конечные пробелы в строке. Не удаляет пробелы между не пробельными символами.
  • 34. toString() String upperCat = upperCat.toString (); Возвращает строку. 
  • 35. public byte[] getBytes(String charsetName) Возвращает отформатированную строку в виде массива байт, используя прилагаемый формат.
  • 36. split() Метод split(разделитель) - возвращает массив строк, которые были получены из исходной строки с помошью разделителя.
  • 38. Статические методы Статические методы класса String можно вызывать без создания экземпляра строки, используя только имя класса. Пример: String five = String.valueOf(5);
  • 39. valueOf Метод valueOf() – преобразует содержимое (примитивные типы, объекты, массивы символов) в строку. String five = String.valueOf(5);
  • 40. Форматер Метод format(шаблон, аргументы) – возвращает новую строку формируя ее на основе шаблона, указаного в параметрах метода используя спецификаторы формата и аргументы метода.
  • 41. Спецификатор формата В простейшей форме спецификатор формата начинается с символа процента, за которым следует спецификатор конверсии формата. Все спецификаторы состоят из единственного символа. Например, спецификатор формата для числа с плавающей точкой выглядит как %f.
  • 42. Форматер Общее количество фактических аргументов в методе format должно совпадать со спецификаторами формата, и сопоставляются они друг с другом слева направо.
  • 43. Спецификаторы формата %a Шестнадцатеричное значение с плавающей точкой %b Логическое (булево) значение аргумента %c Символьное представление аргумента %d Десятичное целое значение аргумента %h Хэш-код аргумента %e Экспоненциальное представление аргумента %f Десятичное значение с плавающей точкой %g Выбирает более короткое представление из двух: %е или %f
  • 44. Спецификаторы формата %o Восьмеричное целое значение аргумента %n Вставка символа новой строки %s Строковое представление аргумента %t Время и дата %x Шестнадцатеричное целое значение аргумента %% Вставка знака % Так же возможны спецификаторы с заглавными буквами: %A (эквивалентно %a). Форматирование с их помощью обеспечивает перевод символов в верхний регистр.
  • 45. Регулярные выражаения Некоторые люди, столкнувшись с проблемой, думают: «О, а использую ка я регулярные выражения для решение этой проблемы». Теперь у меня есть две проблемы! Джейми Завински
  • 46. Регулярные выражаения (англ. regular expressions, жарг. , , регулярки) — система обработки текста, основанная на специальной системе записи образцов для поиска. Образец (англ. pattern), задающий правило поиска, по-русски также иногда называют «шаблоном», «маской».
  • 47. Регулярные выражаения Регулярные выражения одновременно очень странные и крайне полезные, но не смотря на то, что их синтаксис загадочен - это мощный инструмент для исследования и обработки строк. Разобравшись с ними, вы станете более эффективным программистом.
  • 48. Регулярные выражения Метасимволы - это специальные символы, являющиеся важнейшим понятием в регулярных выражениях. Существует несколько групп метасимволов.
  • 49. Регулярные выражения Метасимволы - разделители строк ^ начало строки $ конец строки A начало текста Z конец текста . любой символ в строке
  • 50. Регулярные выражения Метасимволы - стандартные перечни символов w буквенно-цифровой символ или "_" W не w d цифровой символ D не d s любой "пробельный" символ (по умолчанию - [ tnrf]) S не s
  • 51. Регулярные выражения * ноль или более раз ("жадный"), то же что {0,} + один или более раз ("жадный"), то же что {1,} ? ноль или один раз ("жадный"), то же что {0,1} {n} точно n раз ("жадный") {n,} не менее n раз ("жадный")
  • 52. Регулярные выражения {n,m} не менее n но не более m раз ("жадный") *? ноль или более раз ("не жадный"), то же что {0,}? +? один или более раз ("не жадный"), то же что {1,}? ?? ноль или один раз ("не жадный"), то же что {0,1}?
  • 53. Регулярные выражения {n}? точно n раз ("не жадный") {n,}? не менее n раз ("не жадный") {n,m}? не менее n но не более m раз ("не жадный")
  • 54. Регулярные выражения Метасимволы — повторения. После любого элемента регулярного выражения может следовать очень важный тип метасимвола - повторитель. Используя их Вы можете определить число допустимых повторений предшествующего символа, метасимвола или подвыражения.
  • 55. Регулярные выражения public boolean matches(String regularExpression) Проверяет, соответствует ли строка регулярным выражениям. public boolean regionMatches (int thisStart, String string, int start, int length) Метод сравнивает указанную часть строки с другой частью строки.
  • 56. public String replace() Метод replaceAll(регэксп, replacement) -меняет символ или последовательность символов target на replacement
  • 57. StringBuffer Существует четыре конструктора класса:  StringBuffer() - резервирует место под 16 символов без перераспределения памяти  StringBuffer(int capacity) - явно устанавливает размер буфера  StringBuffer(String string) - устанавливает начальное содержимое и резервирует 16 символов без повторого резервирования  StringBuffer(CharSequence cs) - создаёт объект, содержащий последовательность символов и резервирует место ещё под 16 символов
  • 58. Методы класса StringBuffer length() - метод позволяет получить текущую длину объекта. capacity() - метод позволяет получить текущий объём выделенной памяти. setLength(int length) - устанавливает длину строки. Значение должно быть неотрицательным.
  • 59. Методы класса StringBuffer append() - метод добавляет в буффер строчное представление любого другого типа данных. StringBuffer sb = new StringBuffer() ; sb.append(“cat”). append(5);
  • 60. Методы класса StringBuffer Метод insert(данные, индекс) - вставляет данные в буфер с указанного индекса.
  • 61. Методы класса StringBuffer Метод reverse() – изменяет порядок символов в буфере на противоположный.
  • 62. Методы класса StringBuffer Метод delete(индекс) - удаляет последовательность символов из буфера, начиная с индекса. Метод deleteCharAt(индекс) удаляет один символ по указанному индексу.
  • 63. Методы класса StringBuffer Метод replace() - зааменяет один набор символов на другой. Нужно указать начальный и конечный индекс и строку замены.
  • 64. StringBuilder Класс StringBuilder идентичен классу StringBuffer, но обладает большей производительностью. StringBuilder не синхронизирован, поэтому не желательно использовать его в тех случаях, когда к буферу обращаются из несколько потоков.
  • 65. Java String Tokenizer Класс java.util.StringTokenizer предназначен непосредственно для разбиения входящей строки на слова (токены).
  • 66. Java String Tokenizer Метод nextToken() возвращает в виде строки следующее слово; логический метод hasMoreTokens () возвращает true , если в строке ещё есть слова, и false , если слов больше нет. Третий метод countTokens () возвращает число оставшихся слов.
  • 67. String immutable Конструкцией языка (Design). Строки создаются в специальной области памяти в Java куче, известной как "String Intern pool". Если строку можно было бы изменить, работа строкового пула была бы не возможна.
  • 68. Почему строки не изменяемые? Почему же строки являются немизменяемым объектом в java?
  • 69. String immutable Безопасность (Security ). Строки широко используются в качестве параметров для открытия файлов и соединений к базам данных, подключения к сетевым ресурсам, в качестве паролей и т.д. Если бы строку можно было бы изменить во всех этих случаях - это бы привило к серьезным угрозам безопасности программы и данных.
  • 70. String immutable Эффективность (Efficiency). Хэш-код строки часто используется в java в качестве ключа, например в реализации ассоциативного массива java.util.HashMap. Неизменяемость строки гарантирует нам, что ее хэш-код всегда будет одинаковым, что позволяет рассчитывать хэш-код один раз, во время создания строки, что при частом использовании существенно ускоряет работу с строками.