АРІ класу String
Клас String дуже часто використовується програмістами, тому його слід вивчити дуже добре.
Слід пам'ятати, що об'єкти класу String є незмінними. Тому, коли вам здається, що ви міняєте рядок, то насправді ви створюєте новий рядок. У Java є спеціальні класи StringBuffer і StringBuilder, який допускають зміни в рядку.
Класи String, StringBuffer, StringBuilder визначені в пакеті java.lang і доступні автоматично без оголошення імпорту. Всі три класи реалізують інтерфейс CharSequence.
Створити рядок дуже просто. Наприклад, можна так:
String aboutCat = "Кіт - це звучить гордо, а якщо наступити на хвіст, то голосно";
Можна створити масив рядків:
String[] cats = {"Васька", "Барсик", "Мурзик"};
Можна створити порожній об'єкт класу String:
String str = new String();
Можна створити рядок через масив символів:
char[] chars = { 'c', 'a', 't' };
String str = new String(chars);
Є ще конструктор, що дозволяє задати діапазон символьного масиву. Вам потрібно вказати початок діапазону і кількість символів для використання:
char[] chars = {'c', 'a', 't', 'a', 'm', 'a', 'r', 'a', 'n' };
String str = new String(chars, 0, 3);
Можна створити об'єкт класу String з об'єкта класів StringBuffer і StringBuilder за допомогою наступних конструкторів:
String(StringBuffer об'єкт_StrBuf)
String(StringBuilder об'єкт
_StrBuild)
Оператори + і += для String
На мові Java знак плюс (+) означає конкатенацію рядків (concatenation), іншими словами - об'єднання рядків.
String cat = "Кіт";
String name = "Васька";
//складовими є два рядки і пробіл між ними, щоб слова не склеювалися
String fullname = cat + "" + name; // вийде Кіт Васька
Якщо один з операндів у виразі містить рядок, то інші операнди також повинні бути рядками. Тому Java сама може призвести змінні до рядка, навіть якщо вони не є рядками.
int digit = 4;
String paws = " лапи";
String aboutcat = digit + paws; //хоча ми складаємо число і рядок, але все одно отримаємо рядок
Використання методів класу String для обробки рядкових масивів
Ви можете отримати символ, що знаходиться на певній позиції в рядку, викликавши метод charAt (). Індекс першого символу в рядку - 0, останнього - length () - 1. Наступний код повертає 9 символ рядка.
Нумерація символів починається з 0, тому 9 символ в рядку - «О».
1
2
| String anotherPalindrome = "Niagara. O roar again!" ; char aChar = anotherPalindrome.charAt( 9 ); |
Метод | Опис |
---|---|
String substring(int beginIndex, int endIndex) | Повертає підрядок даного рядка, починаючи з символу з індексом beginIndex, закінчуючи endIndex - 1. |
String substring(int beginIndex) | Повертає підрядок даного рядка, починаючи з символу під номером beginIndex і до кінця рядка. |
1
2
| String anotherPalindrome = "Niagara. O roar again!" ; String roar = anotherPalindrome.substring( 11 , 15 ); |
Інші методи для управління рядками
У таблиці наведено деякі методи для роботи з рядками і їх опис.Метод | Опис |
---|---|
String[] split(String regex) String[] split(String regex, int limit) | Шукає збіги в рядку згідно заданому регулярному виразу і розбиває рядок на масив. Необов'язковий аргумент limit задає максимальний розмір поверненого масиву. |
CharSequence subSequence(int beginIndex, int endIndex) | Повертає послідовність символів, починаючи з beginIndex, закінчуючи endIndex — 1. |
String trim() | Повертає рядок, в якому вилучені зайві пробіли на початку рядка і в кінці. |
String toLowerCase() | Повертає копію рядка, символи якої переведені в нижній або верхній регістр. Якщо перетворень не вимагається повертається початковий рядок. |
Пошук символів і підрядків
Розглянемо ще кілька методів для пошуку символів і підрядків.
Клас String містить методи, які повертають позицію символу або підрядка в рядку: indexOf () і lastIndexOf (). Методи indexOf() здійснюють пошук з початку рядка, lastIndexOf () - з кінця. Якщо дані методи не знайшли збігів, вони повертають -1.
Також клас String містить метод contains, який повертає true, якщо задана послідовність символів міститься в рядку. Використовуйте цей метод, якщо необхідно дізнатися про існування підрядка в рядку, а її позиція не важлива.
У наступній таблиці описуються методи indexOf () і lastIndexOf ().
Програма виведе:
Метод extension використовує метод lastIndexOf для визначення останнього входження ".". Метод substring використовує це значення для знаходження розширення файлу.
Метод | Опис |
---|---|
int indexOf(int ch) | Повертає індекс першого(останнього) входження символу в рядку. |
int indexOf(int ch, int fromIndex) | Повертає індекс першого (останнього) входження символу в рядку, починаючи пошук із зазначеного індексу. |
int indexOf(String str) | Повертає індекс першого (останнього) входження підрядка в рядку. |
int indexOf(String str, int fromIndex) | Повертає індекс першого (останнього) входження підрядка в рядку, починаючи пошук із зазначеного індексу. |
boolean contains(CharSequence s) | Повертає true, якщо задана послідовність символів міститься в рядку. |
CharSequence - це інтерфейс, який реалізує клас String, тому можна передавати рядки в метод contains ().
Зміна рядків. Заміна символів і підрядків
Клас String має кілька методів для вставки символів і підрядків у рядок. У таблиці описані методи для заміни знайдених символів і підрядків.
Метод | Опис |
---|---|
String replace(char oldChar, char newChar) | Повертає новий рядок, в якій всі oldChar замінені на newChar. |
String replace(CharSequence target, CharSequence replacement) | Замінює всі входження підрядка target на рядок replacement. |
String replaceAll(String regex, String replacement) | Замінює всі підрядка, які описує заданий регулярний вираз на replacement |
String replaceFirst(String regex, String replacement) | Замінює тільки перший відповідний рядок. |
Приклад
Наступний клас Filename показує приклад використання методів lastIndexOf () і substring ()
для використання різних частин рядка з ім'ям файлу.
для використання різних частин рядка з ім'ям файлу.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| public class Filename { private String fullPath; private char pathSeparator, extensionSeparator; public Filename(String str, char sep, char ext) { fullPath = str; pathSeparator = sep; extensionSeparator = ext; } public String extension() { int dot = fullPath.lastIndexOf(extensionSeparator); return fullPath.substring(dot + 1 ); } //отримання імені файлу без розширення public String filename() { int dot = fullPath.lastIndexOf(extensionSeparator); int sep = fullPath.lastIndexOf(pathSeparator); return fullPath.substring(sep + 1 , dot); } public String path() { int sep = fullPath.lastIndexOf(pathSeparator); return fullPath.substring( 0 , sep); } |
Тепер розглянемо програму, яка використовує клас Filename:
1
2
3
4
5
6
7
8
9
| public class FilenameDemo { public static void main(String[] args) { final String FPATH = "/home/user/index.html" ; Filename myHomePage = new Filename(FPATH, '/' , '.' ); System.out.println( "Extension = " + myHomePage.extension()); System.out.println( "Filename = " + myHomePage.filename()); System.out.println( "Path = " + myHomePage.path()); } } |
1
2
3
| Extension = html Filename = index Path = /home/user |
Більше >> І.Є.Бернакевич, П.П.Вагін. Програмування мовою Java, ст. 4-12
О.М.Ткаченко, Комп'ютерне програмування на мові Java, ст. 51-57
О.М.Ткаченко, Комп'ютерне програмування на мові Java, ст. 51-57