Приветствую Вас ГостьВторник, 14.05.2024, 21:40

Программирование на Java, Android, Delphi


Блог

Главная » 2013 » Февраль » 13 » Строковые объекты в Java
11:46
Строковые объекты в Java
Строки в Java — это неизменяемые объекты. Один раз создав строку мы не можем изменить ее, мы можем только создать новый объект–строку, на основе первой. Для создания изменяемых строк используются объекты StringBuffer и StringBuilder. Строка является объектом и поддерживает множество методов для обработки:
 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
//создание объектов-строк

//пустая строка
String str1 = new String();
//строка инициализирована константой
String str2 = "Строка из константы";
//создание строки путем копирования из другой строки
String str3 = new String(str2);
//создание строки инициализацией из массива символов
char[] char_arr = {'П', 'р', 'и', 'м', 'е', 'р'};
String str4 = new String(char_arr);
//создание строки инициализацией частью массива символов
String str5 = new String(char_arr, 0, 3);
//создание строки с инициализацией массива байтов
byte[] byte_arr = {0x3F, 100, 101, 102, 103, 104, 105};
String str6 = new String(byte_arr);
//с инициализацией частью массива байтов
String str7 = new String(byte_arr, 1, 5);
//из StringBuffer
StringBuffer sbuf = new StringBuffer();
sbuf.append("Эта строка добавлена в StringBuffer");
String str8 = new String(sbuf);
//из StringBuilder
StringBuilder sbu = new StringBuilder("Это строка добавлена в StringBuilder");
String str9 = new String(sbu);
//из массива целых чисел (массив символов Unicode)
int[] codePoints = {350, 351, 352, 353, 354};
String str10 = new String(codePoints, 0, 5);


//вывод созданных строк
jTextArea1.append("Создание строковых переменных\n");
jTextArea1.append(str1 + "\n");
jTextArea1.append(str2 + "\n");
jTextArea1.append(str3 + "\n");
jTextArea1.append(str4 + "\n");
jTextArea1.append(str5 + "\n");
jTextArea1.append(str6 + "\n");
jTextArea1.append(str7 + "\n");
jTextArea1.append(str8 + "\n");
jTextArea1.append(str9 + "\n");
jTextArea1.append(str10 + "\n");


str1 = "Это тестовая строка";
//исчисление символов (получение символов из строки charAt())
jTextArea1.append(Character.toString(str1.charAt(0)) + "\n");

//если нужно извлечь несколько символов то делаем так
char[] arrayofchar = new char[15];
str1.getChars(0, 15, arrayofchar, 0);
jTextArea1.append(new String(arrayofchar) + "\n");

//извлекаем в массив байтов
byte[] arrayofbyte = "Это тоже объект и он имеет методы".getBytes();
jTextArea1.append(new String(arrayofbyte) + "\n");

//всю строку в массив символов
str1 = "всю строку в массив символов";
char[] arrayofchar2 = str1.toCharArray();
jTextArea1.append(new String(arrayofchar2) + "\n");

//сравнение строк методом equals(), который не чувствителен к регистру
str1 = "absdefg";
str2 = "absdefg";
str3 = "abshefg";

if(str1.equals(str2)) jTextArea1.append("str1 и str2 равны (метод equals чувствителен к регистру)\n");
if(! str1.equals(str3)) jTextArea1.append("str1 и str3 не равны (метод equals чувствителен к регистру)\n");

str1 = "absdefg";
str2 = "absDefG";
if(str1.equals(str2)) jTextArea1.append("str1 и str2 равны (метод equals чувствителен к регистру). Эта строчка не отобразится. \n");
if(str1.equalsIgnoreCase(str2)) jTextArea1.append("str1 и str2 равны (метод equalsIgnoreCase не чувствителен к регистру)\n");

//сравнение подстроки данной строки с подстрокой в другой строке
str1 = "у попа была собака";
str2 = "собака";
if(str1.regionMatches(12, str2, 0, 6)) jTextArea1.append("собака найдена в обеих строчках \n");

//определение начинается или заканчивается строка на определенную строку (специализированная версия regionMatches())
if("Всем привет".startsWith("Всем")) jTextArea1.append("Начинается на 'Всем' \n");
if("Всем привет".endsWith("привет")) jTextArea1.append("Кончается на 'привет' \n");

//для того, чтобы сранвивать строки не просто на равенство и неравенство
//а определения больше, равна или меньше строка (для операций сортировок например)

String[] arrforsort = {"январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь"};
String buf;
for(int i = 0; i < arrforsort.length; i ++)
for(int j = i + 1; j < arrforsort.length; j ++){
if(arrforsort[i].compareTo(arrforsort[j]) > 0){
buf = arrforsort[i];
arrforsort[i] = arrforsort[j];
arrforsort[j] = buf;
}
}
jTextArea1.append("Отсортируем массив по возрастанию:\n");
for(int i = 0; i < arrforsort.length; i ++) jTextArea1.append(arrforsort[i] + "\n");

//поиск первого вхождения построки в строку
if("Поиск в строке подстроки".indexOf("подстроки") > 0) jTextArea1.append("Найдено первое вхождение подстроки в строку \n");
//поиск последнего вхождения подстрооки в строку
if("Поиск подстроки поиск подстроки поиск подстроки".lastIndexOf("подстроки") > 0) jTextArea1.append("Найдено последнее вхождение подстроки в строку \n");

//для извлечения подстроки из строки
jTextArea1.append("Достанем из строки подстроку".substring(9) + "\n");
jTextArea1.append("Достанем из строки подстроку".substring(0, 8) + "\n");

//для конкатенации строк
jTextArea1.append("Проссумируем" + "две строки" + "\n");
jTextArea1.append("Проссумируем".concat("две строки") + "\n");

//замена в строке
jTextArea1.append("Может заменим что-нибудь в строке".replace("о", "О") + "\n");
jTextArea1.append("да давайте да заменим все да на нет".replace("да", "нет") + "\n");

//удаляем все пробелы справа и слева в строке
jTextArea1.append(" удалим все пробелы справа и слева ".trim() + "\n");

//изменяем регистр строки
jTextArea1.append("Эта СтРочКА с одИНакоВЫМ РегистрОМ".toLowerCase() + "\n");
jTextArea1.append("Эта СтРочКА с одИНакоВЫМ РегистрОМ".toUpperCase() + "\n");
}

Классы для хранения изменяемых строк StringBuffer и StringBuilder

Как известно, в Java строка является неизменяемым объектом. При попытки модификации строки мы получаем новый объект, содержащий новую строку. Если мы будем изменять строку в цикле, то получим не очень эффективное решение, связанное с пересозданием объектов строк в цикле. Для работы с изменяемой строкой используются два класса StringBuffer и StringBuilder. Оба эти класса предоставляют одинаковый функционал по обработке строки. Они оба наследуются от класса AbstractStringBuilder. Единственная разница — все методы StringBuffer синхронизированы (с директивой synchronized), поэтому предназначены для работы в многопоточной среде, методы StringBuilder не синхронизированы, поэтому его нужно использовать в однопоточной среде. Пример использования:
 //создаем объект для хранения изменяемой строки
StringBuffer sb1 = new StringBuffer("Исходная строка в StringBuffer");
jTextArea1.append(sb1 + "\n");

//различные методы по добавлению строки, числа, символа, последовательности символов в конц строки
sb1.append("!");
sb1.append(" ");
sb1.append(12345);
jTextArea1.append(sb1 + "\n");

//удаление части строки с начального по конечный индекс
sb1.delete("Исходная строка в StringBuffer".length(), sb1.length());
jTextArea1.append(sb1 + "\n");
//поиск подстроки
if(sb1.indexOf("Buffer") > 0) jTextArea1.append("Подстрока Buffer найдена \n");
Категория: Java (Библиотека, пакеты Java) | Просмотров: 2209 | Добавил: alex | Теги: строка, ярославль, объект, строковый, разработка, Java, разработчик программ, программист в Рыбинске | Рейтинг: 5.0/3
Категории раздела
Java (Общие вопросы) [17]
Java (Библиотека, пакеты Java) [17]
Java (Разработка программного обеспечения на Java) [5]
Java (Среда разработки NetBeans) [5]
JSF + PrimeFaces [21]
Java EE [11]
Разное [3]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Поиск
Календарь
«  Февраль 2013  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
25262728
Архив записей