Тема: опрацювання рядків мовою Java.
Мета:
Обладнання: ПК із встановленою ОС і середовищем програмування мовою Java (наприклад, NetBeans, Eclipse, IntelliJ IDEA, JCreator) або стійким сполученням з Інтернетом для роботи з online-середовищами програмування.
Структура уроку
Хід уроку
1. Організаційний момент
Привітання з класом. Концентрація уваги учнів та перевірка їх присутності. Перевірка виконання домашнього завдання.
Мотивація навчання:
Становлення програміста — складний і тривалий процес. У більшості випадків починається він з програми, яка виводить на екран монітора рядок тексту (тип String) "Hello, World!" Мова Java не виняток…
public class first { public static void main(String args[]) { System.out.println("Hello, World!"); } }Про роботу з рядками й піде мова на уроці.
Kонкатенація — це поєднання (злиття) двох рядків в один.
Наприклад, результат виконання таких двох вказівок один і той самий:
String s = "Це рядок";
String s = "Це"+" рядок";
При використанні конкатенації рядків з іншими типами даних буде проведено автоматичне зведення до типу String
String s = "цифра " + 5; //результат "цифра 5"
Також злиття двох рядків можна здійснити за допомогою методу concat:
String s =" та вставайте";
String s = "Поховайте".concat(s);
length — визначення довжини рядка:
String s = "Це рядок";
int j = s.length(); // результат 8
substring(j,k) — отримання частини рядка довжини k, починаючи з символа з номером j.
Наприклад, змінити рядок "Hello" на "Help!" можна таким чином:
String s = "Hello";
s = s.substring(0,3) + "p!";
Порівняння рядків здійснюють за допомогою методу equals.
s1.equals(s2) повертає true, якщо рядки s1 і s2 збігаються, інакше — false. Замість змінних s1, s2 можна записувати рядкові сталі. Метод equals порівнює рядки з урахуванням регістру символів. Для того, щоб не враховувати регістр при порівнянні, використовують метод equalsIgnoreCase:
"Hello".equalsIgnoreCase("hello").
Примітка. Не використовуйте оператор ==, щоб перевірити рядки на збіг. Таким чином лише буде перевірено, чи рядкам відповідає та сама адреса у пам’яті.
Зведення до типу. Інколи постає необхідність зведення типу String до інших типів і навпаки. Наприклад, при введенні з клавіатури числа його буде отримано у вигляді рядка символів. А для проведення обчислень його потрібно привести або до типу int, або до типу float чи double. Для цього використовують методи valueOf, наявні у класі String, а також у класах, у яких які реалізовано числові типи Float, Double тощо — див. текст програми, що зчитує число з клавіатури і виводить результат перемноження введеного числа на 36. У поданому прикладі для знаходження десяткової коми використано метод indexOf, а для заміни десяткової коми на десяткову крапку — метод replace. Інакше (без заміни), при приведенні типу String до Double виникне помилка виконання і виконання програми буде завершено аварійно.
char charAt(int index) — повертає char значення за вказаним номером;
int codePointAt(int index) — повертає символ Unicode code point за вказаним номером;
int codePointBefore(int index) — повертає символ Unicode code point перед вказаним індексом;
int codePointCount(int beginIndex, int endIndex) — повертає кількість кодових точок Unicode у зазначеному інтервалі в рядку;
int compareTo(String anotherString) — порівнює два рядки лексикографічно;
int compareToIgnoreCase(String str) — порівнює два рядки лексикографічно, ігноруючи різницю в регістрах літер;
String concat(String str) — приєднує зазначений рядок str в кінець рядка;
boolean contains(CharSequence s) — повертає true, якщо рядок містить послідовність символів s;
boolean contentEquals(CharSequence s) — порівнює рядок з послідовністю символів s;
boolean endsWith(String suffix) — перевіряє, чи рядок закінчується даним суфіксом;
boolean equals(Object anObject) — порівнює рядок із зазначеним об'єктом;
boolean equalsIgnoreCase(String anotherString) — порівнює рядок з іншим рядком, ігноруючи регістр;
byte[] getBytes() — кодує рядок у послідовність байтів, використовуючи символьний набір (charset) як усталено, результат зберігають у новому масиві байтів;
byte[] getBytes(Charset charset) — кодує рядок у послідовність байтів, використовуючи наданий символьний набір (charset), результат зберігається у новому масиві байтів;
byte[] getBytes(String charsetName) — кодує рядок у послідовність байтів, використовуючи вказаний набір символів, результат зберігається у новому масиві байтів;
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) — копіює символи з рядка у символьний масив;
int hashCode() — повертає ХЕШ-код рядка;
int indexOf(int ch) — повертає індекс першого входження зазначеного символу в рядок;
int indexOf(int ch, int fromIndex) — повертає індекс символу у рядку починаючи пошук із зазначеного індексу;
int indexOf(String str) — повертає індекс першого знаходження підрядка у рядку;
int indexOf(String str, int fromIndex) — повертає індекс в рядку підрядка, починаючи пошук із зазначеної позиції;
boolean isEmpty() — повертає true, тільки тоді, якщо довжина(length()) становить 0;
int lastIndexOf(int ch) — повертає індекс останнього входження вказаного символу в рядок;
int lastIndexOf(int ch, int fromIndex) — повертає індекс останнього входження зазначеного символу, шукаючи його із зазначеної позиції в рядку;
int lastIndexOf(String str) — повертає індекс останнього входження зазначеного підрядка;
int lastIndexOf(String str, int fromIndex) — повертає індекс останнього входження зазначеного підрядка, шукаючи його із зазначеного номера у рядку;
int length() — повертає довжину даного рядка;
boolean matches(String regex) — встановлює, чи відповідає даний рядок регулярному виразу;
String replace(char oldChar, char newChar) — повертає новий рядок, заміняючи усі входження символу (oldChar) в рядку на новий символ (newChar);
String replace(CharSequence target, CharSequence replacement) — заміняє в рядку підрядок target новою послідовністю replacement;
String replaceAll(String regex, String replacement) — заміняє кожен підрядок у рядку, що збігається з регулярним виразом (regex) новим підрядком (replacement);
String replaceFirst(String regex, String replacement) — заміняє перший підрядок, що відповідає заданому регулярному виразу на підрядок для заміни;
String[] split(String regex) — розбиває рядок за певним правилом поданим у регулярному виразі;
String[] split(String regex, int limit) — розбиває рядок за певним правилом поданим у регулярному виразі;
boolean startsWith(String prefix) — перевіряє, чи поточний рядок починається з заданого префікса;
String substring(int beginIndex) — повертає підрядок, починаючи з вказаної позиції включно;
String substring(int beginIndex, int endIndex) — повертає підрядок, починаючи з вказаної позиції beginIndex включно і до позції endIndex невключно;
char[] toCharArray() — перетворює рядок у новий символьний масив;
String toLowerCase() — переводить усі символи рядка у нижній регістр, використовуючи locale правило як усталено;
String toLowerCase(Locale locale) — переводить усі символи рядка у нижній регістр, використовуючи надане правило locale;
String toUpperCase() — переводить всі символи рядка у верхній регістр, використовуючи locale правило як усталено;
String toUpperCase(Locale locale) — переводить усі символи рядка у верхній регістр, використовуюче надане правило locale;
String trim() — повертає копію рядка усуваючи пробіли спереду і ззаду рядка;
static String valueOf(boolean b) — повертає рядкове представлення аргументу boolean типу;
static String valueOf(char c) — повертає рядкове представлення char аргументу;
static String valueOf(char[] data) — повертає рядкове представлення масиву типу char;
static String valueOf(double d) — повертає рядкове представлення double аргументу;
static String valueOf(float f) — повертає рядкове представлення float аргументу;
static String valueOf(int i) — повертає рядкове представлення int аргументу;
static String valueOf(long l) — повертає рядкове представлення аргументу типу long;
static String valueOf(Object obj) — повертає представлення об'єкта у вигляді рядка;
StringBuilder — аналог класу String, призначений для роботи з великими рядками, які потрібно часто змінювати, — див. приклади використання:
створення (оголошення) об’єкту sb :
StringBuilder sb = new StringBuilder();
додавання sb_end до sb за допомогою методу append (якщо змінна sb_end не є послідовністю символів, її значення буде зведено до типу String):
sb.append(add_end);
видалення з sb символів, починаючи зі значення номеру від j0 до j1 (тип int) включно:
sb.delete(j0,j1)
видалення з sb символу з номером j (тип int):
deleteCharAt(j)
вставлення у sb перед символом з номером j (тип int) sbinsert (при потребі sbinsert буде зведено до типу String):
sb.insert(j,sbinsert)
зміна порядку слідування символів у sb:
sb.reverse
перетворення sb на рядок типу String:
sb.toString
передавання даних з sb у рядок my_string:
String my_string = sb.toString();
Конструктори StringBuilder:
StringBuilder() — cтворює порожній об'єкт StringBuilder з ємністю 16 (порожніх елементів);
StringBuilder(CharSequence cs) — створює об'єкт StringBuilder, що містить таку саму кількість символів, що й CharSequence, та ще 16 порожніх елементів у кінці;
StringBuilder(int initCapacity) — cтворює порожній об'єкт StringBuilder із заданою ємністю;
StringBuilder(String s) — cтворює об'єкт StringBuilder, ініціалізований заданим рядком String, та додатково 16 порожніми елементами наприкінці.
Методи класу StringBuilder, пов’язані з довжиною і ємністю (відсутні для класу String):
void setLength (int newLength) — встановлення довжину послідовності симовлів. Якщо нова довжина (newLength) менша ніж поточна length(), символи, які виходять за межі даної довжити буде відкинуто. Якщо newLength більша ніж length(), то наприкінці послідовності буде додано порожні символи (null);
void ensureCapacity (int minCapacity) — ґарантування того, що ємність не менша від вказаного мінімуму.
4. Інструктаж з ТБ
5. Закріплення вивченого матеріалу
Завдання 1. Скласти програму для підрахунку кількості слів у введеному з клавіатури рядку. Словом вважати послідовність символів, що відокремлену символами пропуску. Порівняти складену програму з демонстраційним розв'язанням.
Завдання 2. Скласти програму для підрахунку кількості входжень символа f у рядок s. Порівняти складену програму з демонстраційним розв'язанням.
6. Підбиття підсумків уроку
Виставлення оцінок.
7. Домашнє завдання
Завдання 3. Скласти програму, що видає упорядкований за абеткою список рядків з літерами латиниці, використавши метод compareTo. Порівняти складену програму з демонстраційним розв'язанням. Протестувати програму для рядків з використанням кирилиці, у тому числі й українських літер, яких немає у російській абетці. Поміркувати, як потрібно змінити програму, щоб отримувати правильну відповідь і в цьому випадку.
Завдання 4. Перекласти мовою Java програму мовою Pascal для отримання нормальної диз'юнктивної форми булевої фукції. За бажанням зчитування даних можна зробити з клавіатури, а виведення на екран.
Текст упорядкувала Лариса Михайлівна Лежнюк, учитель середньої загальноосвітньої школи І–ІІІ ступенів № 78 Печерського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 26.11.2018 по 30.11.2018.