МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Звіт
Про виконання лабораторної роботи №2
На тему: «Робота зі стрічками в Java»
Мета роботи: отримати навики програмування з використанням стрічок мови Java.
ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ
ТИПИ ДАНИХ І ДЕКЛАРАЦІЯ ЗМІННИХ
Мова програмування 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;
ОПЕРАТОРИ ПЕРЕДАЧІ УПРАВЛІННЯ
В Java існують такі види операторів управління програми:
- умовний оператор (if-else);;
- оператори циклу (for, while, do…while);
- оператори переходу (break, continue, return);
- оператор вибору (switch).
РОБОТА ЗІ СТРІЧКАМИ (CLASS STRING)
Для зберігання і обробки рядків в Java є два класи: String для незмінних рядків і StringBuffer - для рядків, які можуть змінюватися. Обидва класи розширюють клас Object. Вони знаходяться в пакеті java.lang, тому їх не треба підключати за допомогою оператора import.
Рядкові літерали в Java, як і в C, обмежуються подвійними апострофами, наприклад, "abc" задає рядковий літерал ab
Якщо усередині рядкового літерала необхідно задати символ апострофа, він задається за допомогою символів \", наприклад, "it\"s" задає рядковий літерал it"s.
Ініціалізація об'єкту класу String може виконуватися як за допомогою оператора присвоєння змінної класу String рядкової змінної або рядкового літерала, наприклад:
String str = "Рядок 1";
або при створенні об'єкту за допомогою оператора new з використанням одного з наступних конструкторів класу String:
Конструктор
Об'єкт, який він створює
String()
Порожній рядок.
String (String original)
Новий рядок, який є копією рядок original.
String(char[] value)
Рядок, створений з елементів масиву value.
String(char[] value, int offset, int length)
Рядок, створений з підмасиву символів value, що починається з позиції offset і завдовжки len символів.
String(byte[] bytes)
Рядок, що створюється з масиву байт, з використанням кодування на даному комп'ютері за умовчанням Windows-1251) кожного символу.
String(byte[] bytes, int offset, int length)
Рядок, що створюється з частини масиву байт, що починається з індексу offset і містить length байт.
Довжина рядка може бути визначена за допомогою методу public int length().
Єдина операція, яку можна використовувати для рядків, є операція зчеплення (конкатенація) двох або більш рядків - "+".
Порівняння рядків
Оскільки в Java рядки є об'єктами, для порівняння рядків можна використовувати оператора "==" і метод
public boolean equals(Object anObject)
що порівнює рядок, для якого викликається метод, з об'єктом anObject. Результат буде true, тільки якщо anObject є рядком і значення порівнюваних рядків рівні.
Використання оператора "==" для порівняння рядків може привести до невірного результату, якщо порівнювані рядки - різні об'єкти, тому переважнішим є використання методу equals() (цей метод працює і для рядків String і для рядків StringBuffer).
Інші методи порівняння рядків, що також повертають булеві значення, приведені в таблиці:
Метод
Повертає true, коли
equalsIgnoreCase(String anotherString)
Рядок дорівнює anotherString, незалежно від регістра символів.
startsWith(String prefix)
Рядок починається з prefix.
startsWith(String prefix, int toffset)
Підрядок рядка prefix, починаючи з позиції toffset, міститься на початку рядка, що перевіряється.
endsWith(String suffix)
Рядок закінчується на suffix.
regionMatches(int toffset, String other, int ooffset, int len)
Підрядок в рядку, починаючи з позиції із зсувом toffset, відповідає підрядку, що починається по зсуву ooffset, для len символів.
regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
Той же, що і попередній метод, але ігнорує регістр символів, коли ignoreCase рівне true.
Метод int compareTo(String anotherString) - лексикографічно порівнює два рядки і повертає 0, якщо рядки рівні по довжині і мають однакове, значення, менше 0, якщо в першій позиції, в якій символи рядків не рівні, код символу в першому рядку менше коду символу в другому рядку або довжина першого рядка менше довжини другого рядка всі символи першого рядка рівні символам в тих же позиціях другого рядка. Якщо в першій позиції, в якій символи рядків не рівні код символу в першому рядку більше коду символу в другому рядку або довжина першого рядка більше довжини другого рядка, повертається значення, більше 0.
Пошук в рядках
Для пошуку символів або послідовностей символів (тільки в рядках класу String) використовуються наступні перенавантажувані методи indexOf(), приведені в таблиці:
Декларація метода
Значення, що повертається
int indexOf(int ch)
Перша позиція в рядку, в якому зустрічається символ ch.
public int indexOf(int ch, int fromIndex)
Перша позиція в рядку, починаючи з символу fromIndex,в якій зустрічається символ ch.
int indexOf(String str)
Перша позиція в рядку, в якому зустрічається рядок str.
public int indexOf(String str, int fromIndex)
Перша позиція в рядку, починаючи з символу fromIndex,в якій зустрічається рядок str.
Для кожного методу indexOf() є відповідний метод lastIndexOf(), який починає пошук символу або рядка не з початку, а з кінця рядка. Якщо символ або рядок не знайдені в рядку, в якому проводиться пошук, методи indexOf() і lastIndexOf() повертають значення -1.
Витягання символів і підрядків з рядка
Витягання символів і підрядків з рядка, а також створення нових рядків на основі існуючих рядків виконується за допомогою методів, приведених в таблиці:
Метод
Значення, що повертається
char charAt(int index)
Символ рядка у позиції index.
char[] toCharArray()
Масив символів - копію рядка.
String substring(int beginIndex)
Підрядок початкового рядка, що починається з позиції beginIndex початкового рядка.
String substring(int beginIndex, int endIndex)
Підрядок початкового рядка, що починається у позиції beginIndex і закінчується в позиції endIndex-1 початкового рядка.
void getChars (int srcBegin, int srcEnd, char[] dst, int dstBegin)
Значення, що повертається, немає. Копіює частину рядка, починаючи з символу у позиції srcBegin і закінчуючи символом у позиції dstBegin + (srcEnd-srcBegin)-1 у символьний масив dst, починаючи з позиції dstBegin.
Модифікація рядків
Створення нових рядків на основі існуючих рядків виконується за допомогою методів, приведених в таблиці:
Метод
Значення, що повертається
String concat(String str)
Початковий рядок, в кінець якого доданий рядок str.
String toLowerCase()
Початковий рядок, переведений в нижній регістр.
String toUpperCase()
Початковий рядок, переведений у верхній регістр.
String trim()
Початковий рядок, з якого виключені початкові і кінцеві пробільні символів.
String replace(char oldChar, char newChar)
Початковий рядок, в якому всі символи oldChar замінені на newChar.
Для створення рядків з примітивних типів даних в класі 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.
СТРУКТУРА ПРОГРАМІ 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 задає значення коду завершення програми. За умовчанням програма закінчується з нульовим кодом завершення. Можна вказати ненульовий код завершення, який може бути проаналізований операційною системою або командним файлом.
Індивідуальне завдання
Аналіз типів параметрів, що задаються при введенні програми. Якщо параметр є числом з плаваючою крапкою (тобто складається з мантиси, можливо із знаком "+" або "-", яка може містити десяткову крапку на початку, середині або кінці, а також порядку - цілого числа із знаком "+" або "-" або без знаку, роздільником між мантисою і порядком служить символ "e" або символ "E"), то тип параметра "Float", інакше "String". Програма виводить кількість заданих параметрів і, для кожного параметра, його тип і значення. Перевірка числа і виведення результату виконуються в окремих методах.
Лістинг програми:
public class Lab1
{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i=0;i<args.length;i++)
{
Print(treatment(args[i]), args[i]);
}
}
public static int treatment (String Data)
{
char[] Arr = {'0','1','2','3','4','5','6','7','8','9','e','E','+','-','.'};
if (Data.startsWith("+")|Data.startsWith("-"))
{
if ((Data.indexOf("+",1)>0)|(Data.indexOf("-",1)>0))
{
return 0;
}
}
else if (Data.indexOf(".")>0)
{
if (Data.indexOf(".", Data.indexOf(".")+1)>0)
{
return 0;
}
}
else if (Data.indexOf("e")>0)
{
if ((Data.indexOf("e", Data.indexOf("e")+1)>0)|
(Data.indexOf("E", Data.indexOf("e")+1)>0))
{
return 0;
}
}
else if (Data.indexOf("E")>0)
{
if ((Data.indexOf("e", Data.indexOf("E")+1)>0)|
(Data.indexOf("E", Data.indexOf("E")+1)>0))
{
return 0;
}
}
else
{
int k=0;
for (int i=0;i>Arr.length;i++)
{
for (int j=0;j>Data.length();j++)
{
if (Arr[i]==Data.charAt(j))
{
k = 1;
}
}
}
if (k!=1)
{
return 0;
}
}
return 1;
}
public static void Print (int i,String Data)
{
if (i==0){
System.out.println("Type of parametr is String. Parametr: "+Data);
}
else{
System.out.println("Type of parametr is Float. Parametr: "+Data);
}
}
}
Висновок: На цій лабораторній роботі я отримав навики програмування з використанням стрічок мови Java.