МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
Звіт
до лабораторної роботи №2
на тему:
Робота зі стрічками в Java.
Виконав:
Львів 2008
1. Мета роботи
Отримати навики програмування з використанням стрічок мови Java.
2.Основні теоретичні відомості
2.1. Типи даних і декларація змінних
Мова програмування Java є мовою зі строгою типізацією (strongly typed language). Це означає, що кожна змінна і кожний вираз мають тип, який має бути відомий під час компіляції програми. У Java визначено дві категорії даних:
примітивні типи (primitive types);
типи посилання (reference types).
Існує також спеціальний нульовой тип (null), який не має імені.
Примітивні типи діляться на булівський тип (boolean) і числові типи. В свою чергу, числові типи – це цілі типи (byte, short, int, long та char) дробові типи (float та double). Типы посилання – це типи класів, інтерфейсів та масивів.
Декларація змінних (за виключенням масивів) в Java має наступний вигляд:
і’мя типу ідентифікатор-змінна;
наприклад:
int x;
String str1;
int x1, x2, x3;
double inputValue;
Змінна є вказуванням місця зберігання значення змінної в пам’яті. Змінна примітивного типу завжди містить значення змінної вказаного типу (наприклад, int), а змінна типу посилання містить посилання (адрес) на об’єкт вказаного типу.
Створювати змінні можна в будь-якому місці програми.
Будь-яка декларація змінної має свою область видимості, межі якої залежать від того, де розміщенно цю декларацію. Коли текст програми знаходиться в парі фігурних лапок { }, то створюється новий блок. Блоки в програмі на мові Java можуть бути вкладеними. Змінна доступна в блоці тільки в тому випадку, якщо вона визначена в цьому блоці, чи в одному із блоків, що містять даний блок і стоять вище.
На відміну від мови C, у внутрішньому блоці не можна декларувати змінну з таким ж іменем, як і в зовнішній області видимості.
Також крім області видимості, кожна змінна має і час життя. Коли поточний блок, в якому змінна була задекларована, закінчується, то вона стає доступною для знищення за допомогою збірача сміття (garbage collector).
Змінити область видимості та час життя змінної жизни можна за допомогою ідентифікаторів доступу. Модифікатори вставляються в декларацію змінної перед іменем-типу.
По замовчуванню (без модифікатора) змінна доступна тільки класам в тому ж пакеті, що і клас, в якому вона міститься.
Модифікатор public визначає, що змінна доступна як всередині, так і ззовні класу, тобто змінна є глобальною і доступна будь-якому іншому об’єкту.
Модифікатор private, навпаки, означає, що змінна доступна тільки в тому класі, в якому вона була декларована.
Модифікатор final визначає, що змінна має постійне (незмінне) значення і не може бути перевизначена.
int final GREEN_COLOR =2;
2.2. Оператори передачі управління
В Java існують такі види операторів управління програми:
- умовний оператор (if-else);;
- оператори циклу (for, while, do…while);
- оператори переходу (break, continue, return);
- оператор вибору (switch).
2.3. Робота зі стрічками (CLASS STRING)
Для зберігання і обробки рядків в Java є два класи: String для незмінних рядків і StringBuffer - для рядків, які можуть змінюватися. Обидва класи розширюють клас Object. Вони знаходяться в пакеті java.lang, тому їх не треба підключати за допомогою оператора import.
Рядкові літерали в Java, як і в C, обмежуються подвійними апострофами, наприклад, "abc" задає рядковий літерал abc.
Якщо усередині рядкового літерала необхідно задати символ апострофа, він задається за допомогою символів \", наприклад, "it\"s" задає рядковий літерал it"s.
Ініціалізація об'єкту класу String може виконуватися як за допомогою оператора присвоєння змінної класу String рядкової змінної або рядкового літерала, наприклад:
String str = "Рядок 1";
або при створенні об'єкту за допомогою оператора new з використанням одного з наступних конструкторів класу String:
Довжина рядка може бути визначена за допомогою методу public int length().
Єдина операція, яку можна використовувати для рядків, є операція зчеплення (конкатенація) двох або більш рядків - "+".
2.3.1. Порівняння рядків
Оскільки в Java рядки є об'єктами, для порівняння рядків можна використовувати оператора "==" і метод
public boolean equals(Object anObject)
що порівнює рядок, для якого викликається метод, з об'єктом anObject. Результат буде true, тільки якщо anObject є рядком і значення порівнюваних рядків рівні.
Використання оператора "==" для порівняння рядків може привести до невірного результату, якщо порівнювані рядки - різні об'єкти, тому переважнішим є використання методу equals() (цей метод працює і для рядків String і для рядків StringBuffer).
Інші методи порівняння рядків, що також повертають булеві значення, приведені в таблиці:
Метод int compareTo(String anotherString) - лексикографічно порівнює два рядки і повертає 0, якщо рядки рівні по довжині і мають однакове, значення, менше 0, якщо в першій позиції, в якій символи рядків не рівні, код символу в першому рядку менше коду символу в другому рядку або довжина першого рядка менше довжини другого рядка всі символи першого рядка рівні символам в тих же позиціях другого рядка. Якщо в першій позиції, в якій символи рядків не рівні код символу в першому рядку більше коду символу в другому рядку або довжина першого рядка більше довжини другого рядка, повертається значення, більше 0.
2.3.2. Пошук в рядках
Для пошуку символів або послідовностей символів (тільки в рядках класу String) використовуються наступні перенавантажувані методи indexOf(), приведені в таблиці:
Для кожного методу indexOf() є відповідний метод lastIndexOf(), який починає пошук символу або рядка не з початку, а з кінця рядка. Якщо символ або рядок не знайдені в рядку, в якому проводиться пошук, методи indexOf() і lastIndexOf() повертають значення -1.
2.3.3. Витягання символів і підрядків з рядка
Витягання символів і підрядків з рядка, а також створення нових рядків на основі існуючих рядків виконується за допомогою методів, приведених в таблиці:
2.3.4. Модифікація рядків
Створення нових рядків на основі існуючих рядків виконується за допомогою методів, приведених в таблиці:
Для створення рядків з примітивних типів даних в класі String використовуються переобтяжені статичні public-методи valueOf(), як аргумент яких задається константа, змінна або вираз примітивного типа (boolean, char, int, long, float, або double). Що повертається значення методу є рядок класу String - рядкове представлення аргументу. Крім того, визначені ще дві версії методів valueOf():
static String valueOf(char[] data) - повертає рядкове представлення символьного масиву data;
static String valueOf(char[] data, int offset, int count) - повертає рядкове представлення символьного масиву data, починаючи з позиції offset і розміром count.
2.4.СТРУКТУРА ПРОГРАМІ JAVA І ПРОСТІЙ ВВІД-ВИВІД
Якщо програма є додатком, вона повинна містити у файлі оголошення класу, ім'я якого співпадає з ім'ям файлу програми, статичний, і такий що не повертає значення, public-метод з ім'ям main:
public final static void main(String args[])
{
методу тіла
}
Цей метод запускається першим при виконанні програми. У масиві рядкових змінних args в програму передаються параметри, задані при запуску програми (перший параметр - в нульовому елементі масиву, другий в першому і т.д.). Опис масиву в параметрах методу main є обов'язковим, навіть якщо параметри не обробляються в програмі.
Параметри, що задаються в командному рядку, можна використовувати для введення даних в програму. Параметри, що вводяться, відділяються один від одного, принаймні, одним пропуском. Якщо параметри, що вводяться , містять пропуски, то параметри полягають в подвійні апострофи (") (ці апострофи не передаються програмі Java). Якщо в параметрі, поміщеному в подвійні апострофи, необхідно задати символ подвійного апострофа, то усередині параметра він записується як (\").
Якщо як параметр задається символ зірочки (*), то програмі передаються імена файлів поточного каталога (кожне ім'я як окремий параметр). Якщо необхідно передати зірочку як значення параметра, її необхідно також укласти в подвійні апострофи.
Для виведення результатів виконання програми і діагностичних повідомлень на дисплей в класі System пакету java.lang описані два потокові об'єкти класу PrintStream:
public static final PrintStream out
і
public static final PrintStream err
Оскільки це статичні об'єкти, їх можна використовувати в програмах, не створюючи власних потокових об'єктів, і в той же час їм доступні методи класу для виведення даних (звичайно використовуються методи print() і println()).
При виклику методів print() і println() може бути заданий аргумент типу String, char char[], int, long, float, double, boolean і Object.
Єдина відмінність між методами print() і println() полягає в тому, що останній завжди додає символ перекладу рядка до всього, що друкує, а перший залишається на тому ж рядку. Якщо потрібно перейти на новий рядок, можна викликати println() без параметрів.
Виконання програми закінчується, коли виконаний останній оператор програми або якщо в програмі відбулася помилка (в цьому випадку об'єкт System.err виводить на дисплей діагностичні повідомлення).
Виконання програми можна також завершити за допомогою наступного методу класу System:
public static void exit(int status)
Параметр status задає значення коду завершення програми. За умовчанням програма закінчується з нульовим кодом завершення. Можна вказати ненульовий код завершення, який може бути проаналізований операційною системою або командним файлом.
5. Індивідуальне завдання
Аналіз типів параметрів, що задаються при введенні програми. Якщо параметр має вигляд "значення", то він є одиночним параметром (тип "Single"), якщо параметр має вигляд "значення, значення. ", то він є списком (тип "List"). Програма виводить кількість заданих параметрів і, для кожного параметра, його тип і значення (для кожного параметра-списку при висновку його значення перетвориться в масив типу String, кожен елемент якого містить елемент списку і виводиться в циклі по елементах). Перевірка числа і виведення результату виконуються в окремих методах.
6. Текст програми
public class SingleList {
private static int m;
public static void main(String[] args) {
char mas[];
mas = new char [10];
System.out.println("Parametrs: " + args.length);
for (int i=0; i<args.length; i++) {
mas = args[i].toCharArray();
searchPoint(i, mas);
if (m == -1) System.out.println(args[i] + " - Single");
else System.out.println(args[i] + " - List");
}
}
public static void searchPoint (int i, char[] mas) {
String s = new String(mas);
m = s.indexOf(",");
}
}
Результат виконання програми
Parametrs: 7
1,9 - List
3 - Single
4,5 - List
1,4 - List
5 - Single
8 – Single
4,6,7,8 - List
Висновок
Виконавши лабораторну роботу я отримав навики програмування з використанням стрічок мови Java.