Строки В Java поддерживаются 2 вида строк : неизменяемые – объекты класса String; изменяемые – объекты класса String. Buffer Основные свойства «строковых» классов: оба класса принадлежат пакету java. lang; оба класса не могут наследоваться. Это сделано в целях повышения эффективности работы программ обработки строк
Конструкторы класса String Что такое конструктор? Конструктор - это специальный метод, который вызывается при создании нового объекта. Конструктор без параметров создает пустую строку: String s = new String(); Конструкторы, создающие строки из массива символов: chars[] = {'a', 'b', 'c', 'd', 'e', 'f'}; String s 1 = new String(chars); // s 1 = "abcdef" String s 2 = new String(chars, 2, 3); // s 2 = "cde”
Строковые константы записываются в виде последовательности символов, заключенных в двойные кавычки Каждая такая константа представляет собой полноценный объект класса String, можно вызывать методы этого объекта. String s = "abc"; int n = "abc". length();
Ввод строки с клавиатуры Для чтения данных из консоли используется стандартный поток ввода System. in Чтение данных осуществляется посредством вызова метода read. Line(); Scanner sc = new Scanner(System. in); String s 1; String s 2; s 1 = sc. next. Line(); s 2 = sc. next. Line(); System. out. println(s 1); System. out. println(s 2);
Преобразование строк Когда какое-то значение должно быть преобразовано в строку, вызывается статический метод String. value. Of(…). Этот метод перегружен для всех простых типов. String pi = String. value. Of(3. 14159); String cond = String. value. Of(true); А также для Object. В этом случае вызывается метод to. String() объекта. String. value. Of(some. Obj) // Эквивалентно some. Obj. to. String()
Извлечение символов char. At (int index) - возвращает символ строки, стоящий в позиции index void get. Chars(int source. Start, int source. End, char target[], int target. Start) - существующий массив target заполняется частью строки, начиная с позиции source. Start включительно и кончая позицией source. End исключительно. Параметр target. Start задает место в массиве, с которого начнется его заполнение. char[] to. Char. Array создается массив символов и заполняется символами строки.
Извлечение байт byte[] get. Bytes() - создается массив байт и заполняется символами строки. Символы предварительно преобразуются в байты, поэтому количество байт массива будет равно количеству символов строки. byte[] get. Bytes(String encoding) - то же, но с изменением кодировки
Методы класса String int length() - возвращает длину строки (количество символов в строке). String concat(String s) - присоединяет строку s к строке this String trim() - удаляет ведущие и завершающие пробельные символы из строки this (пробельными символами считаются: ' ', r, n, t). String replace(char original, char replacement) - заменяет все вхождения символа original символом replacement. String to. Lower. Case() - изменяет регистр символов в строке, делая все буквы строчными. String to. Upper. Case() - изменяет регистр символов в строке, делая все буквы прописными String replace. All(String regex, String replacement)) – замещает все вхождения regex на replacement. В качестве regex может быть регулярное выражение String replace. First(String regex, String replacement) – то же, только замещает первое вхождение
Конкатенация строк Для склеивания строк в Java используется оператор “+” String s 1 = "lang" + "uage" ; // s 1 = language Если строка соединяется не со строковым значением простого или ссылочного типа, то последнее преобразуется в строку String s 2 = 3 + " pigs" ; // s 2 = "3 pigs” String s 3 = "four = " + 2; // s 3 = " four = 22 “ String s 4 = "four = " + (2 + 2); // s 4 = “four = 4” Добавить к одной строке другую можно с помощью оператора “+=“ String gruss = “Hallo”; gruss += “, Freunde”; // gruss будет иметь значение “Hallo, Freunde”; Однако следует понимать, что при конкатенации строк создается совершенно новый объект, и значения склеиваемых строк в него копируются. for(int i = 0; i < 10000; i++){ some. String += some. Array[i]; // Никогда не делайте так !!! }
Сравнение строк boolean equals(Object other) – производит посимвольное сравнение строки this со строкой other с учетом регистра символов boolean equals. Ignore. Case(String other) – то же, но без учета регистра символов boolean region. Matches(int start. Index, String other, int other. Start. Index, int num. Chars) - сравнивает между собой два участка строк this и other. boolean region. Matches (boolean ignore. Case, int start. Index, String str 2, int str 2 Start. Index, int nim. Chars) – без учета регистра символов
Сравнение строк int compare. To(String other) - позволяет узнать, какая строка больше и возвращает отрицательное число, если строка this меньше, чем other, ноль, если строки совпадают, и положительное число, если строка this больше, чем строка other. boolean starts. With(String substr) - проверяет, начинается ли строка this с подстроки substr. boolean ends. With(String substr) - проверяет, заканчивается ли строка this подстрокой substr.
Поиск в строках Задача поиска состоит в том, чтобы определить, в каком месте строки в нее входит символ или другая строка. Это позволяет серия методов index. Of(): int index. Of(int ch) - возвращает место первого вхождения в строку this символа ch; int last. Index. Of(int ch) - возвращает место последнего вхождения в строку this символа ch; int index. Of (String substr) - возвращает место первого вхождения в строку this подстроки substr; int last. Index. Of(String substr) - возвращает место последнего вхождения в строку this подстроки substr;
Модификация строк Как известно, изменить объект класса String нельзя Можно только создать другую строку, равную части исходной строки String substring(int begin. Index) - создает новую строку, равную части строки this, начинающейся с позиции begin. Index String substring(int begin. Index, int end. Index) – создает новую строку, равную участку строки this, начиная с позиции begin. Index включительно и заканчивая позицией end. Index исключительно
Изменяемые строки реализованы в Java с помощью класса String. Buffer. У этого класса нет многого, из того, что имеет класс String, зато есть несколько версий методов: append() - добавления, delete() - удаления, insert() - вставки подстроки в строку this. Кроме того, имеются методы set. Char. At() и delete. Char. At() для замещения и удаления отдельных символов
Пример работы с изменяемыми строками Пример. Удалить из строки s 1 все вхождения подстроки s 2 String s 1 = "qwe 12 qwe 345 qwe 678 qwe 90 qwe"; String s 2 = "qwe"; String. Buffer s = new String. Buffer(s 1); int p = -1; while ( (p = s. to. String(). index. Of(s 2)) >= 0 ) { s. delete(p, p + s 2. length()); } s 1 = s. to. String();
Значения Na. N и Infinity Inifinity – бесконечность Может получаться, например, в результате деления на ноль. Может быть как положительным, так и отрицательным (-Infinity). Константы определены в классах Double и Float Double. NEGATIVE_INFINITY Double. POSITIVE_INFINITY Na. N (Not-a-Number) –значение, используемое для представления результата некоторой некорректной операции, такой как деление 0 на 0. Константы определены в классах Double и Float Double. Na. N System. out. println(1 d/0 d); // вернет Infinity System. out. println(0 d/0 d); // вернет Na. N
Приведение типов Ручное приведение типов – c использованием конструкции (<тип>) byte b = (byte)int. Val; Автоматическое преобразование типов производится виртуальной машиной при выполнении математических операций: над переменными разного типа – результат приводится к старшему типу. когда результирующее значение должно получиться большего размера – к типу, старшему чем тип операндов. Например, выражение byte b = 10; b = b*(byte)2; Не будет работать, т. к. необходимо ручное преобразование к byte При делении целых чисел друг на друга преобразование к double или float не производится – и дробная часть отбрасывается. Поэтому, если она необходима – нужно преобразовать один и операндов в double вручную double d = 3 / 2; // d будет иметь значение 1. 0 !!! d = (double)3 / 2; // d будет иметь значение 1. 5
Комментарии Java допускает комментарии в исходном коде программы: многострочные в стиле языка С: /* Любое количество любых строк лишь бы там не было сочетания звездочки и косой черты */ однострочные в стиле языка С++: // все написанное до конца строки комментарий комментарии документатора : /** Многострочный комментарий, * который войдет в * программный документ */ 19
Управляющие конструкции 20 Отметим, что управляющие конструкции Java схожи с операторами языка С, но есть некоторые отличия. Оператор if / else Схема условного оператора такова: if (условие) оператор 1 [else оператор 2] Смысл условного оператора такой же как и в других языках программирования. В отличие от языка С условие всегда должно иметь логическое значение, поэтому пишут if (i == 0) … а не if (!i) … как в С
Управляющие конструкции Операторы цикла whilе и do / while 21 Схемы для оператора цикла следующие: while (условие) оператор; и do оператор while (условие); Условием служит такое же логическое выражение, как в операторе if В первом цикле условие проверяется до выполнения вложенного оператора (цикл с предусловием), во втором - после (цикл с постусловием). Это ведет к тому, что вложенный оператор первого цикла может не выполниться ни разу, а оператор второго цикла обязательно будет выполнен хотя бы раз
Управляющие конструкции Примеры циклов: // Цикл с предусловием float sum = 0, x = 1; while(x < 100) { sum += 1 / x; x++; } // То же, но с постусловием sum = 0; x = 1; do { sum += 1 / x; x++; while(x < 100) // Идиома бесконечного цикла while (true) { // оператор } 22
Управляющие конструкции С. Оператор for 23 Оператор for имитирует такой же оператор языка for ( выражение_инициализации; [выражение 1] ; [выражение 2] ) оператор Смысл оператора for передается следующим псевдокодом, который делает то же, что оператор for. выражение_инициализации; while (выражение 1) { оператор выражение 2; }
Управляющие конструкции Операторы break и continue 24 Чтобы прервать последовательность повторений любого цикла в языке Java используется оператор break Пример. Цикл прекратит повторяться, когда x превысит 99. for (float x = 1; ; x++ ) { if (x > 99) break; sum += 1 / x; } Чтобы перейти к следующей итерации цикла, не завершая текущую, в языке С используется оператор continue
Управляющие конструкции Пример. Второй десяток слагаемых в сумму не войдет. 25 for (float x = 1; x < 100; x++ ) { if ( 10 < x && x < 21) continue; sum += 1 / x; } Оба эти оператора есть в языке Java, но, кроме того, для работы с вложенными циклами имеется вариант этих операторов с меткой. Метка L помечает блок кода, внутри которого располагаются операторы "break L; " или "continue L; " Оператор "break L; " - передает управление оператору, следующему за помеченным блоком Оператор "continue L; " - продолжает помеченный цикл (инструкция continue используется только в циклах);
Управляющие конструкции Пример. Применение оператора break для 26 досрочного выхода из вложенных циклов. for (int i 1 = 0; i 1 < 10; i 1++) { L: for (int i 2 = 0; i 2 < 10; i 2++) { for (int i 3 = 0; i 3 < 10; i 3++) { if (i 3 == 6) break L; } } // Сюда попадет управление после выполнения оператора "break L; " } Оператор return Обеспечивает возврат из вызываемой функции в вызывающую


