Примитивные типы в java
Содержание:
- java.lang.StringBuilder
- Разделение
- Объявление и инициализация переменных
- 1 Конкатенация — склеивание строк
- Замена содержимого строки
- 4 Длина строки
- 3 Класс Character
- Класс String — основной класс представляющий строки
- Разбиение строки на подстроки
- Concatenating Strings
- Java Strings are Immutable
- Java String Operations
- Условные конструкции
- 4 Класс Boolean
- Методы класса Pattern
- StartWith() и EndWith()
- 2 Преобразование к строковому типу
- Добавление текста в конец
- 2 Целые типы
- Соединение строк в Java
- Замена символов replace()
- Объединение строк
- Подстроки
java.lang.StringBuilder
В отличие от String класс StringBuilder позволяет менять содержимое своих экземпляров. В большинстве случаев нужно использовать
String , использование же
StringBuilder целесообразно в случаях, когда вам нужно соединить большое количество строковых переменных, например перебирая элементы массива или коллекции в цикле.
Так же как и у
String у
StringBuilder есть метод
length() , позволяющий узнать его длину в
char -ах.
В отличие от
String у
StringBuilder кроме длины есть ещё вместимость/ёмкость (capacity). Вместительность можно узнать с помощью метода
capacity() , она всегда больше или равна длине.
Конструктор | Описание |
---|---|
Создаёт пустой StringBuilder вместительностью 16 (16 пустых элементов). |
|
Создаёт StringBuilder , содержащий символы из последовательности и 16 дополнительных пустых элементов. |
|
Создаёт пустой StringBuilder с начальной вместительностью в initCapacity элементов. |
|
Создаёт StringBuilder , который содержит указанную строку и 16 дополнительных пустых элементов. |
StringBuilder содержит пару дополнительных методов, связанных с длиной, которых нет в
String :
Метод | Описание |
---|---|
Устанавливает длину последовательности символов. Если newLength меньше length() , то последние символы обрезаются. Если newLength больше length() , то в конец последовательности добавляются нулевые символы. |
|
Обеспечивает, что вместительность будет как минимум равной minCapacity . |
Некоторые методы могут увеличить длину последовательности символов в
StringBuilder . Если после выполнения подобного метода длина результирующей последовательности окажется больше вместительности, то вместительность автоматически увеличится.
Метод | Описание |
---|---|
Добавляет аргумент, преобразованный в строку, в конец StringBuilder-а. | |
Первый метод удаляет подпоследовательность с start до end-1 включительно. Второй метод удаляет символ по индексу. |
|
Вставляет второй аргумент, конвертированный в строку, в позицию index . |
|
Заменяет указанный символ/ы. | |
Меняет порядок символов в StringBuilder на обратный. Первый символ становится последним и так далее. |
|
Возвращает строку, содержащую последовательность символов из StringBuilder . |
Пример использования StringBuilder:
Java
String andStr = » and Petya»;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(«Vasya»);
stringBuilder.append(andStr);
stringBuilder.append(» go to school.»);
System.out.println(stringBuilder);
1 |
StringandStr=» and Petya»; StringBuilder stringBuilder=newStringBuilder(); stringBuilder.append(«Vasya»); stringBuilder.append(andStr); stringBuilder.append(» go to school.»); System.out.println(stringBuilder); |
Цикл статей «Учебник Java 8».
Следующая статья — «Java 8 автоупаковка и распаковка».
Предыдущая статья — «Java 8 числа».
Разделение
Класс Java String содержит метод split(), который можно использовать для разделения String на массив объектов String:
String source = "A man drove with a car."; String[] occurrences = source.split("a");
После выполнения этого кода Java массив вхождений будет содержать экземпляры String:
"A m" "n drove with " " c" "r."
Исходная строка была разделена на символы a. Возвращенные строки не содержат символов a. Символы a считаются разделителями для деления строки, а разделители не возвращаются в результирующий массив строк.
Параметр, передаваемый методу split(), на самом деле является регулярным выражением Java, которые могут быть довольно сложными. Приведенное выше соответствует всем символам, даже буквам нижнего регистра.
Метод String split() существует в версии, которая принимает ограничение в качестве второго параметра — limit:
String source = "A man drove with a car."; int limit = 2; String[] occurrences = source.split("a", limit);
Параметр limit устанавливает максимальное количество элементов, которое может быть в возвращаемом массиве. Если в строке больше совпадений с регулярным выражением, чем заданный лимит, то массив будет содержать совпадения с лимитом — 1, а последним элементом будет остаток строки из последнего среза — 1 совпадением. Итак, в приведенном выше примере возвращаемый массив будет содержать эти две строки:
"A m" "n drove with a car."
Первая строка соответствует регулярному выражению. Вторая — это остальная часть строки после первого куска.
Выполнение примера с ограничением 3 вместо 2 приведет к тому, что эти строки будут возвращены в результирующий массив String:
"A m" "n drove with " " car."
Обратите внимание, что последняя строка по-прежнему содержит символ в середине. Это потому, что эта строка представляет остаток строки после последнего совпадения (a после ‘n водил с’)
Выполнение приведенного выше примера с пределом 4 или выше приведет к тому, что будут возвращены только строки Split, поскольку в String есть только 4 совпадения с регулярным выражением a.
Объявление и инициализация переменных
В общем случае при объявлении переменной в C#, вначале указывается тип данных переменной, затем ее имя:
int nVal; string strVal;
Задание значения переменной можно произвести в момент инициализации:
int radius = 10; string name = "John";
либо после инициализаций:
string name; name = "John";
Необходимо иметь ввиду, что переменную нельзя использовать до тех пор пока она не будет проинициализирована, Например, выполнение следующей программы завершится с ошибкой:
int notInitedVal; Console.Write(notInitedVal);
В примерах мы не будем приводить код импорта и объявления класса. В конце главы будет приведен листинг программы со всеми примерами из данного урока.
Ключевое слово new
Ключевое слово new, как правило, используется при инициализации переменных, которые имеют ссылочный тип данных. О том, что это такое мы расскажем чуть ниже. Пусть у нас есть класс Rectangle
class Rectangle { public double Width = 0; public double Height = 0; }
Данный класс нам нужен только для демонстрации, при разработке собственных классов не стоит создать поля с ключевым словом public. О создании классов и основах объектно-ориентированного программирования будет рассказано в одном из ближайших уроков.
Создадим переменную класса Rectangle
Rectangle rect = new Rectangle(); Console.WriteLine($"Rectangle Width={rect.Width}, Height={rect.Height}");
Переменные типа int, double и т.п. также можно проинициализировать с помощью ключевого слова new, в этом случае будет присвоено значение по умолчанию:
int newInitedValue = new int(); Console.WriteLine("Default int value: " + newInitedValue);
Ключевое слово var. Неявная типизация
При объявлении переменной вместо явного задания типа можно поставить ключевое слово var. В этом случае будет использована система вывода типов для определения типа переменной по ее значению.
int v1 = 12345; var v2 = 12345; Console.WriteLine($"Type of v1: {v1.GetType()}\nType of v2: {v2.GetType()}");
При работе с var необходимо помнить следующее:
- использовать var можно только для объявления локальных переменных;
- var нельзя использоваться для объявления типа возвращаемого значения, типов полей и параметров;
- при объявлении переменной с использованием var она обязательно должна быть проинициализирована, при этом использовать для этого null запрещено;
- объявлять переменную допускающую null-значение с использованием лексемы ? через var нельзя.
1 Конкатенация — склеивание строк
Есть очень интересная и простая вещь, которую можно делать со строками в Java — их можно склеивать. Такая операция называется конкатенация. Ну или чтобы легче запомнилось — Кон-Котэ-Нация. Хотя часто ее называют «склеивание строк» или даже просто «сложение строк».
Чтобы склеить две строки, нужно использовать знак . Это очень просто:
Конкатенация двух строк
Примеры:
Команда | Примечание |
---|---|
содержит строку | |
содержит строку | |
содержит строку |
Ну и, конечно, одновременно можно складывать много строк, а также складывать строки и переменные.
Примеры:
Команда | Примечание |
---|---|
содержит строку содержит строку содержит строку |
В последнем примере видно, что текст в переменной плохо читается, т.к. в нем не хватает пробелов. Чтобы задать один пробел или несколько, нужно просто написать их в коде и обернуть в двойные кавычки. Это проще, чем кажется:
Строка, содержащая один пробел
Кстати, если между кавычками совсем не оставить места (написать две двойные кавычки подряд), получится так называемая «пустая строка»:
Пустая строка
С одной стороны, она вроде бы и есть, а с другой, при ее выводе на экран ничего не выводится. И при склейке с другими строками ничего не происходит. Эдакий аналог нуля, только для строк.
Замена содержимого строки
Метод Replace () заменяет указанное значение другим значением в строке:
Пример
str = «Please visit Microsoft!»;
var n = str.replace(«Microsoft», «W3Schools»);
Метод Replace () не изменяет строку, в которой он вызывается. Возвращает новую строку.
По умолчанию функция Replace () заменяет только первое совпадение:
Пример
str = «Please visit Microsoft and Microsoft!»;
var n = str.replace(«Microsoft», «W3Schools»);
По умолчанию функция Replace () учитывает регистр. Написание Microsoft (с верхним регистром) не будет работать:
Пример
str = «Please visit Microsoft!»;
var n = str.replace(«MICROSOFT», «W3Schools»);
Чтобы заменить регистр без учета регистра, используйте регулярное выражение с пометкой » i » (нечувствительно):
Пример
str = «Please visit Microsoft!»;
var n = str.replace(/MICROSOFT/i, «W3Schools»);
Обратите внимание, что регулярные выражения записываются без кавычек. Чтобы заменить все совпадения, используйте регулярное выражение с флагом /g (глобальное совпадение):
Чтобы заменить все совпадения, используйте регулярное выражение с флагом /g (глобальное совпадение):
Пример
str = «Please visit Microsoft and Microsoft!»;
var n = str.replace(/Microsoft/g, «W3Schools»);
Вы узнаете намного больше о регулярных выражениях в главе регулярные выражения JavaScript.
4 Длина строки
Ну и напоследок хотелось бы рассказать о нескольких методах типа .
Метод
Метод позволяет узнать длину строки – сколько в ней символов.
Примеры:
Команда | Примечание |
---|---|
содержит значение | |
содержит значение | |
содержит значение |
Да, методы можно вызывать у всего, что имеет тип , даже у выражения:
Вызов метода у выражения типа
Метод
Метод позволяет преобразовать все символы строки в маленькие (строчные):
Примеры:
Команда | Примечание |
---|---|
содержит строку | |
содержит пустую строку | |
содержит строку |
Метод
Метод позволяет преобразовать все символы строки в большие (заглавные):
Примеры:
Команда | Примечание |
---|---|
содержит строку | |
содержит строку |
3 Класс Character
Класс в первую очередь интересен большим количеством утилитных статических методов, которые позволяют проверять символы на принадлежность разным категориям.
Примеры
Методы | Описание |
---|---|
Проверяет, является ли символ символом алфавита | |
Является ли символ буквой | |
Является ли символ цифрой | |
Является ли символ пробелом, символом переноса строки или смены параграфа (коды: 12, 13, 14) | |
Является ли символ разделителем: пробел, tab, и т.д. | |
Символ в нижнем регистре — строчные буквы? | |
Символ в верхнем регистре — заглавные буквы? | |
Преобразует символ в нижний регистр | |
Преобразует символ в верхний регистр |
Особенностью данных методов является то, что они работают со всеми известными алфавитами: символы арабских цифр будут определяться как цифры и т.п.
Класс String — основной класс представляющий строки
Мы уже создавали строковые переменные и тогда я просил Вас поверить мне на слово и просто писать что-то вроде: String hello = «Hello world». Это и есть первый способ создать строковую переменную. Второй способ — это создать строку как мы создаем экземпляр класса, новые объекты через ключевое слово new. String hello = new String(«Hello world»). Различия в способах более существенны, чем кажутся на первый взгляд. Для того чтобы понять их нужно немного узнать о распределении памяти.
В языке Java объекты хранятся в куче (heap), а примитивные типы и ссылки на объекты в стеке (stack). Но есть еще такой механизм как пул (pool). Это механизм, если можно так назвать, сохранения строковых переменных для экономии места в памяти. Я нарисовал примерную схему. И попытаюсь объяснить по ней:
Выглядит не очень. Я знаю.
Когда мы создаем строку через ключевое слово new, тогда создается одна строка в пуле и в куче. Если строка создается без ключевого слова new, вот таким образом: String hello = «Hello world» — тогда она создается только в пуле. Если так создать точно такую же строку, новый объект не создается, а две переменные ссылаются на один объект в пуле. Такой механизм пула есть только в объекта String и классов-оберток для примитивных типов (о них мы еще поговорим).
Заметьте, как работает память с другими объектами. На примере объекта Cat видно, что при создании нового объекта с той же самой ссылкой, старый объект уничтожается сборщиком мусора — это специальный механизм в Java, задача которого освобождать память от ненужных объектов (тех на которые потеряна ссылка).
Разбиение строки на подстроки
Метод split()
позволяет разбить строку на подстроки по определенному разделителю. Разделитель
– это какой-нибудь символ или набор символов (передается в качестве параметра).
Например, разобьем текст на отдельные слова (учитывая, что слова разделены
пробелом):
String text = "Я люблю язык Java!"; String words = text.split(" "); for(String word words) System.out.println(word);
Видео по теме
#1 Установка пакетов и первый запуск программы
#2 Структура программы, переменные, константы, оператор присваивания
#3 Консольный ввод/вывод, импорт пакетов
#4 Арифметические операции
#5 Условные операторы if и switch
#6 Операторы циклов while, for, do while
#7 Массивы, обработка элементов массива
#8 (часть 1) Строки в Java, методы класса String
#8 (часть 2) Строки — классы StringBuffer и StringBuider
#9 Битовые операции И, ИЛИ, НЕ, XOR
#10 Методы, их перегрузка и рекурсия
Concatenating Strings
The String class includes a method for concatenating two strings −
string1.concat(string2);
This returns a new string that is string1 with string2 added to it at the end. You can also use the concat() method with string literals, as in −
"My name is ".concat("Zara");
Strings are more commonly concatenated with the + operator, as in −
"Hello," + " world" + "!"
which results in −
"Hello, world!"
Let us look at the following example −
Example
public class StringDemo { public static void main(String args[]) { String string1 = "saw I was "; System.out.println("Dot " + string1 + "Tod"); } }
This will produce the following result −
Java Strings are Immutable
In Java, strings are immutable. This means, once we create a string, we cannot change that string.
To understand it more deeply, consider an example:
Here, we have created a string variable named example. The variable holds the string «Hello! «.
Now suppose we want to change the string.
Here, we are using the method to add another string World to the previous string.
It looks like we are able to change the value of the previous string. However, this is not .
Let’s see what has happened here,
- JVM takes the first string «Hello! «
- creates a new string by adding «World» to the first string
- assign the new string «Hello! World» to the example variable
- the first string «Hello! « remains unchanged
Java String Operations
Java String provides various methods to perform different operations on strings. We will look into some of the commonly used string operations.
1. Get Length of a String
To find the length of a string, we use the method of the String. For example,
Output
String: Hello! World Length: 12
In the above example, the method calculates the total number of characters in the string and returns it. To learn more, visit Java String length().
2. Join two Strings
We can join two strings in Java using the method. For example,
Output
First String: Java Second String: Programming Joined String: Java Programming
In the above example, we have created two strings named first and second. Notice the statement,
Here, we the method joins first and second and assigns it to the joinedString variable.
We can also join two strings using the operator in Java. To learn more, visit Java String concat().
3. Compare two Strings
In Java, we can make comparisons between two strings using the method. For example,
Output
Strings first and second are equal: true Strings first and third are equal: false
In the above example, we have created 3 strings named first, second, and third. Here, we are using the method to check if one string is equal to another.
The method checks the content of strings while comparing them. To learn more, visit Java String equals().
Note: We can also compare two strings using the operator in Java. However, this approach is different than the method. To learn more, visit Java String == vs equals().
Условные конструкции
Последнее обновление: 17.04.2018
Одним из фундаментальных элементов многих языков программирования являются условные конструкции. Данные конструкции
позволяют направить работу программы по одному из путей в зависимости от определенных условий.
В языке Java используются следующие условные конструкции: и
Конструкция if/else
Выражение if/else проверяет истинность некоторого условия и в зависимости от результатов проверки выполняет определенный код:
int num1 = 6; int num2 = 4; if(num1>num2){ System.out.println("Первое число больше второго"); }
После ключевого слова ставится условие. И если это условие выполняется, то срабатывает код, который помещен в далее в
блоке if после фигурных скобок. В качестве условий выступает операция сравнения двух чисел.
Так как, в данном случае первое число больше второго, то выражение истинно и возвращает значение
. Следовательно, управление переходит в блок кода после фигурных скобок и начинает выполнять содержащиеся там инструкции, а
конкретно метод . Если бы первое число оказалось бы меньше второго или равно ему, то инструкции в блоке if не выполнялись бы.
Но что, если мы захотим, чтобы при несоблюдении условия также выполнялись какие-либо действия? В этом случае мы можем добавить блок :
int num1 = 6; int num2 = 4; if(num1>num2){ System.out.println("Первое число больше второго"); } else{ System.out.println("Первое число меньше второго"); }
Но при сравнении чисел мы можем насчитать три состояния: первое число больше второго, первое число меньше второго и числа равны.
С помощью выражения , мы можем обрабатывать дополнительные условия:
int num1 = 6; int num2 = 8; if(num1>num2){ System.out.println("Первое число больше второго"); } else if(num1<num2){ System.out.println("Первое число меньше второго"); } else{ System.out.println("Числа равны"); }
Также мы можем соединить сразу несколько условий, используя логические операторы:
int num1 = 8; int num2 = 6; if(num1 > num2 && num1>7){ System.out.println("Первое число больше второго и больше 7"); }
Здесь блок if будет выполняться, если равно и одновременно равно .
Конструкция switch
Конструкция switch/case аналогична конструкции , так как позволяет обработать сразу несколько условий:
int num = 8; switch(num){ case 1: System.out.println("число равно 1"); break; case 8: System.out.println("число равно 8"); num++; break; case 9: System.out.println("число равно 9"); break; default: System.out.println("число не равно 1, 8, 9"); }
После ключевого слова switch в скобках идет сравниваемое выражение. Значение этого выражения последовательно сравнивается со значениями, помещенными после операторов
сase. И если совпадение найдено, то будет выполняет соответствующий блок сase.
В конце блока сase ставится оператор break, чтобы избежать выполнения других блоков. Например, если бы убрали оператор в следующем случае:
case 8: System.out.println("число равно 8"); num++; case 9: System.out.println("число равно 9"); break;
то выполнился бы блок , (поскольку переменная num равна 8). Но так как в этом блоке оператор break отсутствует, то начал бы выполняться блок .
Если мы хотим также обработать ситуацию, когда совпадения не будет найдено, то можно добавить блок default,
как в примере выше. Хотя блок default необязателен.
Также мы можем определить одно действие сразу для нескольких блоков case подряд:
int num = 3; int output = 0; switch(num){ case 1: output = 3; break; case 2: case 3: case 4: output = 6; break; case 5: output = 12; break; default: output = 24; } System.out.println(output);
Тернарная операция
Тернарную операция имеет следующий синтаксис: .
Таким образом, в этой операции участвуют сразу три операнда.
В зависимости от условия тернарная операция возвращает второй или третий операнд: если условие равно , то
возвращается второй операнд; если условие равно , то третий. Например:
int x=3; int y=2; int z = x<y? (x+y) : (x-y); System.out.println(z);
Здесь результатом тернарной операции является переменная z. Сначала проверяется условие .
И если оно соблюдается, то z будет равно второму операнду — (x+y), иначе z будет равно третьему операнду.
НазадВперед
4 Класс Boolean
Тип практически такой же, как тип . Отличия минимальны.
Ниже мы покажем упрощенный вариант класса :
Код | Описание |
---|---|
Константы: и Переменная-значение Конструктор класса Метод возвращает значение внутренней переменной-значения Этот статический метод умеет преобразовывать в и в . |
В типе есть две константы (два поля):
Константы класса | Аналог типа boolean | Описание |
---|---|---|
истина | ||
ложь |
Работать с ними можно так же, как и с типом :
Код | Примечание |
---|---|
— единственный класс, который можно писать внутри условия | |
Все три переменные равны / | |
Константы можно сравнивать и через и через Так тоже будет работать. |
Autoboxing тут работает отлично, поэтому можете пользоваться этим типом так же, как типом : никаких подводных камней тут нет.
Как записано | Как это работает |
---|---|
А вот как происходят сравнения между типами и :
Если очень нужно создать независимый объект , то надо создать его явно:
И еще один пример: использование внутри :
Код | Примечание |
---|---|
Скомпилируется и будет работать |
Скомпилируется, но работать не будет:
Код | Примечание |
---|---|
Ошибка. В этой строке кинется исключение |
Методы класса Pattern
- компилирует содержимое в промежуточное представление, сохраняемое в новом объекте . Этот метод или возвращает ссылку на объект, в случае успешного выполнения, или генерирует исключение в случае обнаружения некорректного синтаксиса регулярного выражения. Любой объект класса , используемый этим объектом или возвращаемый из него, использует его настройки по умолчанию, например, поиск с учетом регистра. В качестве примера, фрагмент кода создает объект , хранящий скомпилированное представление регулярного выражения для поиска строк, начинающихся с символа точки.
-
решает ту же задачу, что и , но с учетом : набора битовых констант для побитовых флагов типа ИЛИ. В классе объявлены константы , которые можно комбинировать при помощи побитового ИЛИ (например, ) и передать в аргументе .
За исключением , эти константы являются альтернативой вложенных флаговым выражениям, продемонстрированным в части 1. При обнаружении флаговой константы, отличающейся от определенных в классе , метод генерирует исключение . Например, эквивалентно предыдущему примеру, причем константа и вложенное флаговое выражение делают одно и то же.
- возвращает исходную строку регулярного выражения, скомпилированную в объект .
- возвращает флаги объекта .
Одноразовый поиск |
---|
Метод класса позволяет сэкономить на создании объектов и при одноразовом поиске по шаблону. Этот метод возвращает true, если в находится соответствие шаблону , в противном случае он возвращает false. Если в регулярном выражении содержится синтаксическая ошибка, метод генерирует исключение . Например, выводит , подтверждая, что во фразе содержатся только пробелы и символы в нижнем регистре. |
StartWith() и EndWith()
Методы StartWith() и EndWith() проверяют, начинается ли String с определенной подстроки:
String one = "This is a good day to code"; System.out.println( one.startsWith("This") ); System.out.println( one.startsWith("This", 5) ); System.out.println( one.endsWith("code") ); System.out.println( one.endsWith("shower") );
В этом примере создается строка и проверяется, начинается ли она и заканчивается ли она различными подстроками.
- Первая строка (после объявления String) проверяет, начинается ли String с подстроки «This». Поскольку это происходит, метод startWith() возвращает true.
- Вторая строка проверяет, начинается ли строка с подстроки «This» при запуске сравнения с символа с индексом 5. Результат равен false, поскольку символ с индексом 5 равен «i».
- Третья строка проверяет, заканчивается ли String подстрокой «code». Поскольку это происходит, метод endWith() возвращает true.
- Четвертая строка проверяет, заканчивается ли String подстрокой «shower». Так как это не так, метод endWith() возвращает false.
2 Преобразование к строковому типу
Как уже говорилось выше, разработчики Java сделали так, что абсолютно все переменные, объекты, выражения в Java можно преобразовать к типу .
Более того, это автоматически происходит, когда мы складываем тип с каким-нибудь другим типом. Примеры:
Команда | Примечание |
---|---|
содержит строку | |
содержит строку | |
содержит строку |
Во всех трех примерах мы спокойно складывали переменные типа и , и в результате всегда получался тип .
Арифметические операции с типом проводить нельзя. Даже если строка целиком состоит из цифр.
Примеры:
Команда | Примечание |
---|---|
содержит строку | |
содержит строку | |
содержит строку |
Операция сложения выполняется слева направо, так что результат может быть несколько неожиданным. Пример:
Команда | Примечание |
---|---|
содержит строку |
Порядок выполнения:
Добавление текста в конец
-
Метод читает символы текста сопоставителя и присоединяет их в конец объекта , на который ссылается аргумент . Этот метод прекращает чтение на последнем символе, предшествующем предыдущему соответствию шаблону. Далее, метод добавляет символы из объекта типа , на который ссылается аргумент , в конец объекта (строка может содержать ссылки на текстовые последовательности, захваченные во время предыдущего поиска; они указываются при помощи символов и номеров захватываемых групп). Наконец, метод устанавливает значение позиции сопоставителя для добавления в конец равным позиции последнего совпавшего символа плюс единица, после чего возвращает ссылку на текущий сопоставитель.
Метод генерирует исключение , если сопоставитель еще не находил соответствия или предыдущая попытка поиска завершилась неудачно. Он генерирует исключение , если строка задает отсутствующую в шаблоне захватываемую группу).
Метод добавляет весь текст в объект и возвращает ссылку на этот объект. После последнего вызова метода , вызовите метод , чтобы скопировать оставшийся текст в объект .
Захватываемые группы |
---|
Как вы помните из части 1, захватываемая группа — это последовательность символов, заключенная в метасимволы круглых скобок (). Цель этой конструкции состоит в сохранении найденных символов для дальнейшего повторного использования во время поиска по шаблону. Все символы из захватываемой группы рассматриваются во время поиска по шаблону как единое целое. |
2 Целые типы
В языке Java аж 4 целых типа: , , и . Они отличаются размером и диапазоном значений, которые могут хранить.
Тип
Самым часто используемым является тип . Его название происходит от Integer (целый). Все целочисленные литералы в коде имеют тип (если в конце числа не указана буква , или ).
Переменные этого типа могут принимать значение от до .
Это достаточно много и хватает почти для всех случаев жизни. Почти все функции, которые возвращают число, возвращают число типа .
Примеры:
Код | Пояснение |
---|---|
Метод возвращает длину строки | |
Поле содержит длину массива. |
Тип
Тип получил свое название от . Его еще называют короткое целое. В отличие от типа , его длина всего два байта и возможный диапазон значений от до .
То есть в нем даже число миллион не сохранишь. Даже 50 тысяч. Это самый редко используемый целочисленный тип в Java. В основном его используют, когда хотят сэкономить на памяти.
Допустим, у вас ситуация, когда заранее известно, что значения с которыми вы работаете не превышает 30 тысяч, и таких значений миллионы.
Например, вы пишете приложение, которое обрабатывает картинки сверхвысокой четкости: на один цвет приходится бит. А точек у вас в картинке — миллион. И вот тут уже играет роль, используете вы тип или .
Тип
Этот тип получил свое название от — его еще называют длинное целое. В отличие от типа , у него просто гигантский диапазон значений: от до
Почему же он не является основным целым типом?
Все дело в том, что Java появилась еще в середине 90-х, когда большинство компьютеров были 32-х разрядными. А это значило, что все процессоры были заточены под работу с числами из 32-х бит. С целыми числами из 64-х бит процессоры работать уже умели, но операции с ними были медленнее.
Поэтому программисты разумно решили сделать стандартным целым типом тип , ну а тип использовать только тогда, когда без него действительно не обойтись.
Тип
Это самый маленький целочисленный тип в Java, но далеко не самый редко используемый. Его название совпадает со словом — минимальная адресуемая ячейка памяти в Java.
Размер допустимых значений типа не так уж велик: от до . Но не в этом его сила. Тип чаще всего используется, когда нужно хранить в памяти большой блок обезличенных данных. Массив типа просто идеально подходит для этих целей.
Например, вам нужно куда-то скопировать файл.
Вам не нужно обрабатывать содержимое файла: вы просто хотите создать область памяти (буфер), скопировать в нее содержимое файла, а затем записать эти данные из буфера в другой файл. Массив типа — то, что нужно для этих целей.
Тем более, что в переменной-типа-массив хранится только ссылка на область памяти. При передаче значения этой переменной в какой-то метод произойдет только передача адреса в памяти, а сам блок памяти копироваться на будет.
Соединение строк в Java
Чтобы соединить строки в Java, подойдёт операция сложения «+»:
String str1 = "Java"; String str2 = "Hi"; String str3 = str1 + " " + str2; System.out.println(str3); // Hi Java
Если же в предстоящей операции сложения строк будет применяться нестроковый объект, допустим, число, данный объект преобразуется к строке:
String str3 = "Год " + 2020;
По факту, когда мы складываем строки с нестроковыми объектами, вызывается метод valueOf() класса String. Этот метод преобразует к строке почти все типы данных. Чтобы преобразовать объекты разных классов, valueOf вызывает метод toString() данных классов.
Объединять строки можно и с помощью concat():
String str1 = "Java"; String str2 = "Hi"; str2 = str2.concat(str1); // HiJava
Метод принимает строку, с которой нужно объединить вызывающую строку, возвращая нам уже соединённую строку.
Также мы можем использовать метод join(), позволяющий объединять строки с учетом разделителя. Допустим, две строки выше слились в слово «HiJava», однако мы бы хотели разделить подстроки пробелом. Тут и пригодится join():
String str1 = "Java"; String str2 = "Hi"; String str3 = String.join(" ", str2, str1); // Hi Java
Метод join — статический. Первый параметр — это разделитель, который будет использоваться для разделения подстрок в общей строке. Последующие параметры осуществляют передачу через запятую произвольного набора объединяемых подстрок — в нашем случае их две, но можно и больше.
Замена символов replace()
Класс Java String содержит метод replace(), который может заменять символы в строке. Он фактически не заменяет символы в существующей строке. Скорее, возвращает новый экземпляр String. Он равен экземпляру String, из которого он был создан, но с заменой указанных символов. Пример:
String source = "123abc"; String replaced = source.replace('a', '@');
После выполнения этого кода замененная переменная будет указывать на строку с текстом:
123@bc
Метод replace() заменит все символы, соответствующие символу, переданному методу в качестве первого параметра, вторым символом, переданным в качестве параметра.
Объединение строк
Для соединения строк можно использовать
операцию сложения («+»):
String str1 = "Java"; String str2 = "Hello"; String str3 = str1 + " " + str2; System.out.println(str3); // Hello Java
При этом если в операции сложения строк
используется не строковый объект, например, число, то этот объект преобразуется
к строке:
String str4 = "Год " + 2015;
Еще один метод объединения — метод join() позволяет
объединить строки с учетом разделителя. Например, две строки
String str1 = "Java"; String str2 = "Hello";
будут сливаться в одно слово «HelloJava», если их
объединить с помощью оператора +:
String str3 = str1 + str2;
но если мы хотим, чтобы две подстроки при
соединении были разделены пробелом, то можно воспользоваться методом join() следующим
образом:
String str3 = String.join(" ", str2, str1); // Hello Java
В общем случае вместо пробела здесь
можно ставить любой разделитель в виде строки.
Обратите внимание, что каждый раз при
объединении строк мы получали новую строку как результат объединения
Подстроки
Вы можете извлечь часть строки — подстроку с помощью метода substring() класса String:
String string1 = "Hello World"; String substring = string1.substring(0,5);
После выполнения этого кода переменная substring будет содержать строку Hello.
Метод substring() принимает два параметра. Первый — это индекс символа первого символа, который будет включен в подстроку. Второй — это индекс последнего символа для включения в подстроку. Параметры означают «от — в том числе до -».
Первый символ в строке имеет индекс 0, второй символ имеет индекс 1 и т. д. Последний символ в строке имеет индекс String.length() — 1.