150 likes | 427 Views
Лекція 5. Робота з рядками. План лекції: 1. Клас String 2. Створення String -об ’ єкту 3. Операції з String -об ’ єктами 4. Клас StringBuffer 5. Створення StringBuffer -об ’ єкту 6. Операції з StringBuffer -об ’ єктами 7. Аргументи командного рядка. Основні поняття про рядки.
E N D
Лекція 5. Робота з рядками План лекції: 1. Клас String 2. СтворенняString-об’єкту 3. Операції з String-об’єктами 4. Клас StringBuffer 5. СтворенняStringBuffer-об’єкту 6. Операції з StringBuffer-об’єктами 7. Аргументи командного рядка
Основні поняття про рядки Рядок в Java – об’єкт класу String (абоStringBuffer) Основні властивості: Існують методи для порівняння рядків, пошуку підрядка, об’єднання рядків і т.п. Існує декілька способів створення String-об’єктів Після створення String-об’єкту символи, що входять в рядок, не можна змінювати. Щоб змінити текстовий рядок, необхідно створити новий String-об’єкт. Для створення рядків, що можуть змінюватися, використовують клас StringBuffer. Класи StringтаStringBuffer визначені в java.lang, вони доступні всім програмам автоматично. Обидва класи визначені як final, тому втни не можуть мати підкласів.
Створення String-об’єкту Клас Stringпідтримує декілька конструкторів 1. Створення пустого рядка String s=new String(); 2. Створення рядкана основі масиву char chars[]={‘a’,’b’,’c’}; String s=new String(chars); або так: char chars={‘a’,’b’,’c’,’d’,’e’,’f’}; String s=new String(chars,2,3); // s=“cde” 3. Копія об’єкта String s=new String(obj); // obj – об’єкт типу String індекс 1-го елемента довжина
Створення String-об’єкту - приклади class MakeString{ public static void main(String args[]){ char c[]={'J','a','v','a'}; String s1=new String(c); String s2=new String(s1); System.out.println(s1); System.out.println(s2);} } Тип char в Java використовує 16 розрядів (символи Unicode). Для ініціалізації рядків 8-розрядними byte-масивами існує спеціальний конструктор: String(byte[], int, int) Запустити byte-масив (коди символів) class SubStringConstr{ public static void main(String args[]){ byte ascii[]={65,66,67,68,69,70}; String s1=new String(ascii); System.out.println(s1); String s2=new String(ascii,2,3); System.out.println(s2);} } індекс 1-го елемента довжина Запустити
Операції зі String-об’єктами Визначення довжини рядка Метод length() char c[ ]={‘a’,’b’,’c’}; String s=new String(c); System.out.println(s.length()); Текстові літерали Для текстових літералів створюються об’єкти класуString String s=“abc”; System.out.println(“abc”.length()); Конкатенація (об’єднання) рядків В Java заборонено застосовувати оператори зі String-об’єктами, крім оператора “+” – об’єднання рядків String s1=“Івану Петренко ”+19+” років”; // “Івану Петренко 19 років” String s2=“чотири: ”+2+2; // “чотири: 22” Зверніть увагу!
Метод toString() Для перетворення об’єктів в рядки використовується стандартний метод toString(). Метод toString()визначено в класі Object (загальнийсуперклас Java) ► Метод toString() викликається автоматично ► Метод toString()можна переозначати class Box{ double width, height, depth; Box(double w,doubleh,double d){ width=w; height=h; depth=d;} public String toString(){ return “Розміри: ”+width+”:”+height+”:”+depth;}} class toStringDemo{ public static void main(String args[]){ Box obj=new Box(10,20,30); String s=“Увага! ”+obj; System.out.println(s); System.out.println(obj);}} Зверніть увагу! Запустити Результат: Увага! Розміри: 10:20:30 Розміри: 10:20:30
Методи для роботи з рядками - вилучення символів char charAt(int) void getChars(int, int, char[], int) індекс початку рядка індекс символу масив-результат byte[] getBytes() індекс в результуючому масиві, з якого починається заповнення індекс кінця рядка + 1 перетворення символів в байти char[] toCharArray() перетворення символів в String-об’єкті в масив class getCharsDemo{ public static void main(String args[]){ String s="Приклад текстового рядка – моваJava"; char buf[]=new char[9]; s.getChars(27,36,buf,0); System.out.println(buf); char symbol; symbol=s.charAt(32); System.out.println(symbol); byte nums[]=new byte[s.length()]; nums=s.getBytes(); for(inti=0;i<s.length();i++) System.out.println(nums[i]); char chars[]=new char[s.length()]; chars =s.toCharArray(); for(inti=0;i<s.length();i++) System.out.println(chars[i]);} } Запустити
Порівняння рядків boolean equals(String) trueякщо однакові символи (з урахуванням регістру) в однаковому порядку, інакше - false String-об’єкт для порівняння booleanequalsIgnoreCase(String) те саме, що в методі equals(), але без врахування регістру String-об’єкт для порівняння class equalsDemo{ public static void main(String args[]){ String s1=“Hello”; String s2=new String(“Hello”); String s3=“Good-bye”; String s4=“HELLO”; System.out.println(s1+” дорівнює ”+s2+” --> ”+s1.equals(s2)); System.out.println(s1+” дорівнює ”+s3+” --> ”+s1.equals(s3)); System.out.println(s1+” дорівнює ”+s4+” --> ”+s1.equals(s4)); System.out.println(s1+” дорівнює ”+s4+” -->”+s1.equalsIgnoreCase(s4)); System.out.println(s1+” дорівнює ”+s2+” --> ”+(s1==s2)); }} Зверніть увагу! Запустити Зверніть увагу!
Пошукпідрядків і символів • intindexOf(charабоString) пошук індексу першого • входження символу або • підрядка в рядок • intlastIndexOf(char абоString)пошук індексу останнього • входження символу або • підрядкав рядок • Другим аргументом може вказуватись початкова точка (індекс) пошуку. В першому випадку пошук виконується від точки початку пошуку до кінця рядка, у другому – від точки початку пошуку до початку рядка. Якщо співпадінь не знайдено, повертається -1 class indexOfDemo{ public static void main(String args[]){ String s=“Now is the time for all good men ”+ “to come to the aid of their country.”; System.out.println(s); System.out.println(“1: ”+s.indexOf(‘t’)); System.out.println(“2: ”+s.lastIndexOf(‘t’)); System.out.println(“3: ”+s.indexOf(“the”)); System.out.println(“4: ”+s.indexOf(‘t’,10)); System.out.println(“5: ”+s.indexOf(“the”,10));}} Запустити
Зміна рядка Оскільки String-об’єкти незмінні, для зміни рядка треба або копіювати відповідний об’єкт в StringBuffer, або створювати нову копію рядка
Зміна рядка - приклад class StringReplace{ public static void main(String args[]){ String str="Ми програмуємо на С++"; String s,s1,s2,s3,s4; s=str.substring(3,19); System.out.println(s); s1=str.concat(" та Java"); System.out.println(s1); s2=s1.replace(' ','_'); System.out.println(s2); s3=s1.toLowerCase(); System.out.println(s3); s4=s1.toUpperCase(); System.out.println(s4); } } Запустити Результат: програмуємо на С Ми програмуємо на С++ та Java Ми_програмуємо_на_С++_та_Java ми програмуємо на с++ та java МИ ПРОГРАМУЄМО НА С++ ТА JAVA
Створення StringBuffer-об’єкту Клас StringBufferзабезпечує додаткові функціональні можливості для рядків 1. Відмінності між Stringта StringBuffer String – незмінні символьні послідовності фіксованої довжини StringBuffer– перезаписувані символьні послідовності В StringBufferможна вставляти символи і підрядки в середину і в кінець рядка. Це робиться за рахунок виділення додаткової пам’яті 2. Конструктор StringBuffer()резервується пам’ять для 16-ти додаткових символів StringBuffer(int) явно вказується розмір буферу StringBuffer(String)задається початкове значення і виділяється місце ще для 16-ти символів
Методи для роботи з StringBuffer-об’єктами
Методи для роботи з StringBuffer-об’єктами - приклад class StringBufferDemo{ public static void main(String args[]){ StringBufferstr=new StringBuffer("Ми програмуємо на С++"); System.out.println(str.length()); System.out.println(str.capacity()); str.insert(18,"Javaта "); System.out.println(str); str.replace(26,29,"Pascal"); System.out.println(str); str.reverse(); System.out.println(str); } } Запустити Результат: 21 37 Ми програмуємо на Java та С++ Ми програмуємо на Java та Pascal lacsaPат avaJаномєумаргорпиМ
Аргументи командного рядка Аргументи командного рядка – інформація, яка вказується після імені програми Приклад: class CommandLine{ public static void main(String args[]){ for(inti=0;i<args.length;i++) System.out.println(“args[”+i+”]: ”+args[i]); }} Виклик: java CommandLineце текст до програми 100 та -1 Результат: args[0]: це args[1]: текст args[2]: до args[3]: програми args[4]: 100 args[5]: та args[6]: -1