1 / 83

Работа со строками

Разработал к.т.н. Фофанов О.Б. Работа со строками. В пакет java.lang встроен класс, инкапсулирующий структуру данных, соответствующую строке . Класс String - объектное представление неизменяемого символьного массива ( статические строки). Работа со строками.

missy
Download Presentation

Работа со строками

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Разработал к.т.н. Фофанов О.Б. Работа со строками • В пакет java.lang встроен класс, инкапсулирующий структуру данных, соответствующую строке. • КлассString - объектное представление неизменяемого символьного массива (статические строки). JAVA, Кафедра ОСУ, АВТФ

  2. Работа со строками • В этом классе есть методы, которые позволяют сравнивать строки, осуществлять в них поиск и извлекать определенные символы и подстроки. • Класс StringBuffer используется тогда, когда строку после создания требуется изменять (динамические строки). JAVA, Кафедра ОСУ, АВТФ

  3. Работа со строками • Можно создавать объекты типа String с помощью оператора new. • Для создания пустой строки используется конструктор без параметров: • String s = newString(); • String str = newString("какая-то строка"); JAVA, Кафедра ОСУ, АВТФ

  4. Работа со строками • String() — создается объект с пустой строкой; • String (String str) — из одного объекта создается другой • String (StringBuffer str) — преобразованная копия объекта класса BufferString; • String(byte[] byteArray) — объект создается из массива байтов byteArray (ASCII); • String (char [] charArray) — объект создается из массива charArray символов Unicode; JAVA, Кафедра ОСУ, АВТФ

  5. Работа со строками • String (byte [] byteArray, int offset, int count) — объект создается из части массива байтов byteArray, начинающейся с индекса offset и содержащей count байтов; • String (char [] charArray, int offset, int count) — то же, но массив состоит из символов Unicode; • String(byte[] byteArray, String encoding) — символы, записанные в массиве байтов, задаются в Unicode-строке, с учетом кодировки encoding; (СР1251, СР866, KOI8, MacCyrillicи тд) winLikeWin = new String(bytearr, "Cp1251");  • String(byte[] byteArray, int offset, int count, String encoding) — то же самое, но только для части массива. JAVA, Кафедра ОСУ, АВТФ

  6. Работа со строками char chars[] = { 'a', 'b', 'с', 'd', 'e', 'f' }: String s = newString(chars,2,3); // s=“cde” JAVA, Кафедра ОСУ, АВТФ

  7. Работа со строками char chars[] = { 'а', 'b', 'с' }; String s = newString(chars); // s= “abc “ JAVA, Кафедра ОСУ, АВТФ

  8. Работа со строками ВJava включено несколько синтаксических дополнений, цель которых—помочь программистам в выполнении операций со строками. В числе таких операций создание объектов типа String, слияние нескольких строк и преобразование других типов данных в символьное представление. JAVA, Кафедра ОСУ, АВТФ

  9. Работа со строками • String s = "abc";//упрощенный вариант • Один из общих методов, используемых с объектами String—метод length(), возвращающий число символов в строке String s = "abc"; System.out.println(s.length()); System.out.println("abc".length()); /*для каждой строки-литерала создается свой представитель класса String */ JAVA, Кафедра ОСУ, АВТФ

  10. Слияние строк String s = “Не is” + age + " years old."; //String s = newStringBuffer("He is "). // append(age); //s.append(" years old.").toString(); JAVA, Кафедра ОСУ, АВТФ

  11. Слияние строк • По определению каждый объект класса String не может изменяться. • Нельзя ни вставить новые символы в уже существующую строку, ни поменять в ней одни символы на другие. • И добавить одну строку в конец другой тоже нельзя. • Поэтому транслятор Java преобразует операции, выглядящие, как модификация объектов String, в операции с родственным классом StringBuffer. JAVA, Кафедра ОСУ, АВТФ

  12. Извлечение символов • Чтобы извлечь одиночный символ из строки, можно сослаться непосредственно на индекс символа в строке с помощью метода charAt: publicchar charAt(int index) Выбирает из строки символ с индексом index (символы индексируются от нуля). str="JAVA"; str = str + "C";//str="JAVAC"; charch = str.charAt(2); //ch='V' JAVA, Кафедра ОСУ, АВТФ

  13. Извлечение символов • Если нужно извлечь несколько символов, можете воспользоваться методом getChars(int start,int end, char buf, int index) String s = "This is a demo of the getChars method."; int start = 10; int end = 14; JAVA, Кафедра ОСУ, АВТФ

  14. Извлечение символов char buf[] = newchar [end—start]; s.getChars(start, end, buf, 0); System.out.println(buf); // “demo” } } JAVA, Кафедра ОСУ, АВТФ

  15. Сравнение • методequals() Логический метод equals (Stringstr) , , возвращает true , если аргумент str не равен null, и строка, содержащаяся в нем, полностью идентична строке,вызывающей этот метод вплоть до совпадения регистра букв. В остальных случаях возвращается значение false . • методequalsIgnoreCase() JAVA, Кафедра ОСУ, АВТФ

  16. Сравнение String s1="Hello"; String s2="Hello"; String s3="Good-bye"; String s4="HELLO"; System.out.println(s1+"equals"+s2+"->“ +s1.equals(s2)); JAVA, Кафедра ОСУ, АВТФ

  17. Сравнение System.out.println(s1+"equals"+s3+"->“ +s1.equals(s3)); System.out.println(s1+"equals"+s4+"->“ +s1.equals(s4)); System.out.println(s1+"equalsIgnoreCase"+ s4+"->"+ s1.equalsIgnoreCase(s4)); JAVA, Кафедра ОСУ, АВТФ

  18. Сравнение Hello equals Hello -> true Hello equals Good-bye -> false Hello equals HELLO -> false Hello equalsIgnoreCase HELLO -> true JAVA, Кафедра ОСУ, АВТФ

  19. Сравнение • Метод equals() и оператор == выполняют две совершенно различных проверки. • Mетод equals сравнивает символы внутри строк • Оператор == сравнивает две переменные-ссылки на объекты и проверяет, указывают ли они на разные объекты или на один и тот же. JAVA, Кафедра ОСУ, АВТФ

  20. Сравнение String str1 = "string"; String str2 = "string"; System.out.println(str1==str2 ? "the same" : "not the same"); Ответ: "the same". Что означает, что ссылки на строки равны. Это сделано на уровне компилятора, очевидно, для экономии памяти. Компилятор создает ОДИН экземпляр строки, и присваивает str1 и str2 ссылку на этот экземпляр (ТОЛЬКО ДЛЯ ЛИТЕРАЛОВ-СТРОК) JAVA, Кафедра ОСУ, АВТФ

  21. Сравнение Если скомпоновать строку из кусков, ссылка на нее будет другой. String str1 = "string"; String str2 = "str"; String str3 = "ing"; System.out.println(str1==(str2+str3) ? "the same" : "not the same"); JAVA, Кафедра ОСУ, АВТФ

  22. Сравнение String str1 = "string"; String str2 = newString("string"); System.out.println(str1==str2 ? "the same" : "not the same"); Результатом также будет "not the same". JAVA, Кафедра ОСУ, АВТФ

  23. Сравнение class EqualsNotEqualTo { public static void main(String args[]) { String s1="Hello"; String s2=new String(s1); System.out.println(s1+"equals"+s2+ "->"+s1.equals(s2)); System.out.println(s1+"=="+s2+", ->"+(s1==s2)); } } JAVA, Кафедра ОСУ, АВТФ

  24. Сравнение C:\> java EqualsNotEqualTo Hello equals Hello -> true Hello == Hello -> false JAVA, Кафедра ОСУ, АВТФ

  25. Сравнение • Метод compareTo (String str) возвращает целое число типа int , вычисленное по следующим правилам: • Сравниваются символы данной строки this и строки str с одинаковым индексом, пока не встретятся различные символы с индексом, допустим k , или пока одна из строк не закончится. • В первом случае возвращается значение this.charAt(k) - str.charAt(k), т. е. разность кодировок Unicode первых несовпадающих символов. • Во втором случае возвращается значение this.length() - str.length() , т. е. разность длин строк. • Если строки совпадают, возвращается 0. JAVA, Кафедра ОСУ, АВТФ

  26. Сравнение • если целое значение, возвращенное методом, отрицательно, то строка, с которой был вызван метод, меньше строки-параметра, если положительно—больше. если же метод compareTo вернул значение 0, строки идентичны. JAVA, Кафедра ОСУ, АВТФ

  27. Сравнение 1. String w1 = "cat"; String w2 = "hat"; int comparison = w1.compareTo(w2); // comparison = -5 JAVA, Кафедра ОСУ, АВТФ

  28. Сравнение /** отсортированный в порядке возрастания список строк */ class SortString { staticStringarr[] = {“Иванов”, ‘’Ли’’,….,“Ю” }; public static void main(String args[]) { JAVA, Кафедра ОСУ, АВТФ

  29. Сравнение for (int j = 0; j < arr.length; j++) { for (int i = j + 1; i < arr.length; i++) { if (arr[i].compareTo(arr[j]) < 0) { String t = arr[j]; arr[j] = arr[i]; arr[i] = t; } }// конец цикла i System.out.println(arr[j]); } // конец цикла j } } JAVA, Кафедра ОСУ, АВТФ

  30. Сравнение Сравнивать можно не только целые строки, но и их отдельные части. метод regionMatches() в двух формах: в одной происходит точное сравнение символов, как в методе equals, а в другой — сравнение без учета регистра, как в методе equalsIgnoreCase: • publicbooleanregionMatches(int start, String other, int ostart, intolen) JAVA, Кафедра ОСУ, АВТФ

  31. Сравнение • public booleanregionMatches(boolean ignoreCase, int start, String other, int ostart, intolen) JAVA, Кафедра ОСУ, АВТФ

  32. Сравнение String str = "Look, look!"; boolean b1, b2, b3; b1 = str.regionMatches(6, "Look", 0, 4); b2 = str.regionMatches(true, 6,"Look“,0, 4); b3 = str.regionMatches(true, 6,"Look", 0, 5); JAVA, Кафедра ОСУ, АВТФ

  33. Сравнение • public booleanstartsWith(String prefix, int offset) Возвращает true, если строка начинается с подстроки prefix (со смещением offset). • public boolean startsWith(String prefix) Сокращение для startsWith(prefix, 0). • public booleanendsWith(String suffix) Возвращает true, если строка заканчивается подстрокой suffix. JAVA, Кафедра ОСУ, АВТФ

  34. Поиск • В класс String включена поддержка поиска определенного символа или подстроки, для этого в нем имеются два метода—indexOf(str) и lastIndexOf(str). • Каждый из этих методов возвращает индекс того искомого символа, либо индекс начала искомой подстроки. • В любом случае, если поиск оказался неудачным методы возвращают значение -1. int i = “раскраска ".indexOf ("рас"); int i = "Раскраска ".lastIndexOf ("рас") JAVA, Кафедра ОСУ, АВТФ

  35. Модификация • объекты класса String нельзя изменять, всякий раз, когда модифицируется строка, • нужно копировать ее в объект типа StringBuffer, • использовать один из методов класса String, которые создают новую копию строки, внося в нее изменения. JAVA, Кафедра ОСУ, АВТФ

  36. Модификация • substring(int p) метод создает новую копию символов из того диапазона индексов оригинальной строки, который указан при вызове. Можно указать только индекс первого символа нужной подстроки—тогда будут скопированы все символы, начиная с указанного и до конца строки JAVA, Кафедра ОСУ, АВТФ

  37. Модификация можно указать и начальный, и конечный индексы—при этом в новую строку будут скопированы все символы, начиная с первого указанного, и до (но не включая его) символа, заданного конечным индексом. s = "Hello World".substring(6);// "World" s1 = "Hello World".substring(3,8);//"lo Wo" JAVA, Кафедра ОСУ, АВТФ

  38. Модификация • concat () Слияние, или конкатенация строк выполняется с помощью метода concat. Этот метод создает новый объект String, копируя в него содержимое исходной строки и добавляя в ее конец строку, указанную в параметре метода. str5 = “Guten Tag".concat(“ Welt"); // " Guten TagWelt " JAVA, Кафедра ОСУ, АВТФ

  39. Модификация • replace (char old, char new) Методу replace в качестве параметров задаются два символа. Все символы, совпадающие с первым, заменяются в новой копии строки на второй символ. s1 = "Hello".replace('l' , 'w'); // "Hewwo" JAVA, Кафедра ОСУ, АВТФ

  40. Модификация • toLowerCase() и toUpperCase() Эта пара методов преобразует все символы исходной строки в нижний и верхний регистр, соответственно. st = "Hello".toLowerCase();// "hello" s2 = "Hello".toUpperCase();// "HELLO" JAVA, Кафедра ОСУ, АВТФ

  41. Модификация • trim() метод trim () убирает из исходной строки все ведущие и замыкающие пробелы. s=“Hello World ".trim(); //"Hello World” • valueOf() преобразование любого значения в текстовую строку Такой статический метод определен для любого существующего в Java типа данных JAVA, Кафедра ОСУ, АВТФ

  42. Модификация • может преобразовывать типы: boolean, byte, short, int, long, float, doubleи тип Object • Например: boolean bTmp = true; String s = String.valueOf (bTmp); JAVA, Кафедра ОСУ, АВТФ

  43. Модификация • Кроме того, в каждом классе есть метод toString () , переопределенный или просто унаследованный от класса Object . Он преобразует объекты класса в строку. Фактически, метод valueOf() вызывает метод toString() соответствующего класса. Поэтому результат преобразования зависит от того, как реализован метод toString (). JAVA, Кафедра ОСУ, АВТФ

  44. Модификация • Обратное преобразование, из строки Методparse<Type>()класса-оболочки этого типа, где вместо <Type> будет имя типа. • byte b = Byte.parseByte("10"); • short shrt = Short.parseShort("1234"); • long lng = Long.parseLong("1234567"); • float flt = Float.parseFloat("1.123"); • double dbl = Double.parseDouble("1.123"); • int i = Integer.parseInt("10"); JAVA, Кафедра ОСУ, АВТФ

  45. Класс StringBuffer • Объекты типа StringBuffer представляют собой последовательности символов, которые могут расширяться и модифицироваться JAVA, Кафедра ОСУ, АВТФ

  46. Класс StringBuffer • Создать объект класса StringBuffer можно только конструкторами. Конструкторы В классе StringBuffer три конструктора: StringBuffer () — создает пустой объект с емкостью 16 символов; StringBuffer (int capacity) — создает пустой объект заданной емкости capacity ; StringBuffer (String str) — создает объект емкостью str.length () + 16, содержащий строку str . JAVA, Кафедра ОСУ, АВТФ

  47. Класс StringBuffer • Текущую длину StringBuffer можно определить, вызвав метод length () • Для определения всего места, зарезервированного под строку в объекте StringBuffer нужно воспользоваться методом capacity() JAVA, Кафедра ОСУ, АВТФ

  48. Класс StringBuffer …… StringBuffer sb = newStringBuffer("Hello"); int l = sb.length(); int c = sb.capacity(); // l=5 c =21 JAVA, Кафедра ОСУ, АВТФ

  49. Методы StringBuffer • ensureCapacity () Если нужно после создания объекта StringBuffer зарезервировать в нем место для определенного количества символов, можно для установки размера строки воспользоваться методом ensureCapacity (). Это бывает полезно, когда заранее известно, что придется добавлять к буферу много небольших строк. buf.ensureCapacity(buf.length() + now.length() + 2); JAVA, Кафедра ОСУ, АВТФ

  50. Методы StringBuffer • setLength() Если нужно в явном виде установить длину строки в буфере, можно использовать метод setLength(). Если задать значение, большее чем длина содержащейся в объекте строки, этот метод заполнит конец новой, расширенной строки символами с кодом ноль. JAVA, Кафедра ОСУ, АВТФ

More Related