Как сравнить string по их длине в java 7 и java 8?
Содержание:
- Метод String compareTo()
- Методы класса Pattern
- JSON
- Получение символов и байтов
- Конвертировать с использованием StringBuffer или StringBuilder
- Типы данных в Java
- Методы класса String
- Обрезка посредством trim()
- Поиск подстрок
- Creating Strings
- Поиск с помощью indexOf()
- Порядок выполнения операторов
- Методы класса
- Конвертация с помощью String.format()
- Замена символов replace()
- Устройство класса String
- StartWith() и EndWith()
- String Pool
- Некоторые методы работы со строками
- Извлечение символов и подстрок
- Параметры класса
- Объединение строк
- Методы класса Matcher
- Преобразование с использованием Integer.toString(int)
Метод String compareTo()
Метод compareTo() используется, когда нужно определить порядок строк лексикографически. Он сравнивает значения char аналогично методу equals(). Если две строки точно совпадают, метод compareTo() вернет значение (результат = 0). При сравнении двух строк Java он возвращает положительное (результат > 0) целое число, если первый объект String следует за второй строкой. Метод compareTo() возвращает отрицательный результат (результат < 0), если первый объект String предшествует второй строке:
result1 == result2 :возвращает 0; result1 > result2 :возвращает положительное значение; result1 < result2 : возвращает отрицательное значение.
Пример
class TestClass{ public static void main (String[] args) { String str1 = "Java"; String str2 = "Java"; String str3 = "ASP"; int val = 0; val = str1.compareTo(str2); System.out.println(val); val = str1.compareTo(str3); System.out.println(val); val = str3.compareTo(str1); System.out.println(val); } }
Результат
0 9 -9
Методы класса Pattern
- компилирует содержимое в промежуточное представление, сохраняемое в новом объекте . Этот метод или возвращает ссылку на объект, в случае успешного выполнения, или генерирует исключение в случае обнаружения некорректного синтаксиса регулярного выражения. Любой объект класса , используемый этим объектом или возвращаемый из него, использует его настройки по умолчанию, например, поиск с учетом регистра. В качестве примера, фрагмент кода создает объект , хранящий скомпилированное представление регулярного выражения для поиска строк, начинающихся с символа точки.
-
решает ту же задачу, что и , но с учетом : набора битовых констант для побитовых флагов типа ИЛИ. В классе объявлены константы , которые можно комбинировать при помощи побитового ИЛИ (например, ) и передать в аргументе .
За исключением , эти константы являются альтернативой вложенных флаговым выражениям, продемонстрированным в части 1. При обнаружении флаговой константы, отличающейся от определенных в классе , метод генерирует исключение . Например, эквивалентно предыдущему примеру, причем константа и вложенное флаговое выражение делают одно и то же.
- возвращает исходную строку регулярного выражения, скомпилированную в объект .
- возвращает флаги объекта .
Одноразовый поиск |
---|
Метод класса позволяет сэкономить на создании объектов и при одноразовом поиске по шаблону. Этот метод возвращает true, если в находится соответствие шаблону , в противном случае он возвращает false. Если в регулярном выражении содержится синтаксическая ошибка, метод генерирует исключение . Например, выводит , подтверждая, что во фразе содержатся только пробелы и символы в нижнем регистре. |
JSON
Сериализация и Десериализация
JSON — невероятно удобный и полезный синтаксис для хранения и обмена данными. Java полностью поддерживает это.
Прим. перев. Для использования JSON из примера необходимо подключить библиотеку JSON Simple.
Вы можете сериализовать данные следующим образом:
Получается следующая строка JSON:
Десериализация в Java выглядит так:
Используемый в примере файл JSON (jsonDemoFile.json):
Прим. перев. В Java проектах очень часто для работы с JSON используют библиотеки Gson от Google или Jackson. Обе библиотеки очень популярны и хорошо поддерживаются. Попробуйте и их.
Получение символов и байтов
Можно получить символ по определенному индексу в строке, используя метод charAt():
String theString = "This is a good day to code"; System.out.println( theString.charAt(0) ); System.out.println( theString.charAt(3) );
Этот код распечатает:
T s
Так как это символы, расположенные в индексах 0 и 3 в строке.
Вы также можете получить байтовое представление метода String, используя метод getBytes():
String theString = "This is a good day to code"; byte[] bytes1 = theString.getBytes(); byte[] bytes2 = theString.getBytes(Charset.forName("UTF-8");
Первый вызов getBytes() возвращает байтовое представление строки, используя кодировку набора символов по умолчанию на машине. Набор символов по умолчанию зависит от компьютера, на котором выполняется код. Поэтому обычно лучше явно указать набор символов, который будет использоваться для создания представления байтов (как в следующей строке).
Второй вызов getBytes() возвращает UTF-8-байтовое представление String.
Конвертировать с использованием StringBuffer или StringBuilder
StringBuilder и StringBuffer – это классы, используемые для объединения нескольких значений в одну строку. StringBuffer является потокобезопасным, но медленным, тогда как StringBuilder не является поточно-ориентированным, но работает быстрее.
Пример 1
class Method5 { public static void main(String args[]) { int number1 = -1234; StringBuilder sb = new StringBuilder(); sb.append(number1); String str1 = sb.toString(); System.out.println("With StringBuilder method: string = " + str1); StringBuffer SB = new StringBuffer(); SB.append(number1); String str2 = SB.toString(); System.out.println("With StringBuffer method: string = " + str2); } }
Вывод
With StringBuilder method: string = -1234 With StringBuffer method: string = -1234
Объект StringBuilder представляет объект String, который можно изменять и обрабатывать как массив с последовательностью символов. Чтобы добавить новый аргумент в конец строки, экземпляр StringBuilder реализует метод append().
Пример 2
class Method6 { public static void main(String args[]) { String str1 = new StringBuilder().append(1234).toString(); System.out.println("With StringBuilder method: string = " + str1); String str2 = new StringBuffer().append(1234).toString(); System.out.println("With StringBuffer method: string = " + str2); } }
Вывод
With StringBuilder method: string = -1234 With StringBuffer method: string = -1234
Наиболее важным является вызов метода toString(), чтобы получить строковое представление данных.
Типы данных в Java
- Примитивы. (byte, short, char, int, float, long, double, boolean).
- Объекты. Размер объекта зависит от конкретной реализации VM и архитектуры процессора. Поэтому дать однозначный ответ не получится. Все же хочется понять (на примере конкретной VM) какой размер памяти выделяется под java-объект.
- Массивы. Одномерные линейные структуры, которые могут содержать все перечисленные типы (включая другие массивы). Массивы также являются объектами, но со специфичной структурой.
Примитивы
С размером примитивов все понятно — их размер определен в спецификации языка () и спецификации jvm (). Интересно заметить, что для типа boolean jvm использует int, а не byte как могло бы показаться (). Также интересно, что при создании массива boolean[] под каждый элемент массива будет выделен 1 байт, а не 4.
тип | размер (байт) | размер в массиве (байт) | допустимые значения |
---|---|---|---|
byte | 1 | 1 | -128 .. 127 |
short | 2 | 2 | -32768 .. 32767 |
chart | 2 | 2 | ‘\u0000’ .. ‘\uffff’ |
int | 4 | 4 | -2147483648 .. 2147483647 |
float | 4 | 4 | -3.4028235e+38f .. 3.4028235e+38f |
long | 8 | 8 | -9223372036854775808 .. 9223372036854775807 |
double | 8 | 8 | -1.7976931348623157e+308 .. 1.7976931348623157e+308 |
boolean | 4 | 1 | false, true |
Объекты
Для описания экземпляров массивов Hotspot использует класс arrayOopDesc, для описания остальных Java-классов используется класс instanceOopDesc. Оба эти класса наследуются от oopDesc и оба содержат методы для вычисления размера заголовка. Так например a instabceOopDesc вычисляет размер заголовка (в машинных словах) следующим образом:
где HeapWordSize определяется как размер указателя. В зависимости от архитектуры CPU 4 и 8 байт для x86 и x86_64 (в Oracle именуют x64) соответственно.
Чтобы понять размер instanceOopDesc надо заглянуть в oopDesc, так как в самом instanceOopDesc никаких полей не объявлено. Вот что мы там увидим:
В файле oopsHierarchy.hpp объявлены необходимые типы данных для работы с иерархией объектов oop (ordinary object pointer). Посмотрим как объявлены те типы, которые используются в oopDesc:
То есть это два указателя (читай два машинных слова) для конкретной архитектуры — так называемое маркировочное слово (mark word) и адрес (который может быть представлен указателем или смещением) на метаданные класса.
Идея этого union metadata состоит в том, что при включенной опции будет использоваться 32х битное смещение (_compressed_klass) а не 64х битный адрес (_klass).
Получается размер заголовка java-объекта 8 байт для x86 и 16 байт для x86_64 в не зависимости от параметра UseCompressedOops:
Архитектура | -XX:+UseCompressedOops | -XX:-UseCompressedOops |
---|---|---|
x86 | 8 байт () | |
x86_64 | 16 байт () |
Массивы
В arrayOopDesc размер заголовка вычисляется следующим образом:
где
- align_size_up — инлайнер для выравнивания первого аргумента по второму. Например .
- length_offset_in_bytes — возвращает размер заголовка в байтах в зависимости от опции . Если она включена, то размер равен = 8 (4 + 4) байт для x86 и 12 (8 + 4) байт для x86_64. При выключенной опции размер равен = 8 байт для x86 и 16 байт для x86_64.
- заметьте, что к вычисленному размеру прибавляется . Это делается для того чтобы «зарезервировать место» под поле length массива, так как оно явно не определено в классе. При включенной ссылочной компрессии (актуально только для 64x битной архитектуры) это поле займет вторую половину поля _klass (см. класс oopDesc)
Посчитаем, что у нас получается. Размер заголовка массива после выравнивания:
Архитектура | -XX:+UseCompressedOops | -XX:-UseCompressedOops |
---|---|---|
x86 | 12 байт () | |
x86_64 | 16 байт () | 24 байта () |
Методы класса String
У класса очень много методов: одних только конструкторов у него 18 штук! Поэтому ниже мы приведем только самые основные из них:
Методы | Описание |
---|---|
Возвращает количество символов в строке | |
Проверяет, что строка == пустая строка | |
Проверяет, что в строке — только whitespace-символы: пробел, tab, enter и т.п. | |
Возвращает символ, который стоит на index-позиции в строке. | |
Возвращает массив символов (копию), из которых состоит строка | |
Преобразует строку в набор байт и возвращает массив байт. | |
Разделяет строку на несколько подстрок. | |
Склеивает вместе несколько подстрок | |
Помещает строку в пул . |
Больше о конструкторах вы можете узнать из статьи Зачем нужен конструктор?
Давайте напишем программу, которая преобразовывает путь к файлу из Unix Style в Windows Style. Unix в качестве разделителя директорий использует символ , Windows — символ .
Решение 1 — использование массива char’ов
Код | Примечания |
---|---|
Создание объекта Scanner Чтение строки с консоли Преобразование строки в массив символов Цикл по символам Если символ равен , заменить его на . Не забываем про экранирование. Создаем новую строку на основе массива символов. Выводим строку на экран. |
Решение 2 — использование методов и :
Код | Примечания |
---|---|
Создание объекта Scanner Чтение строки с консоли Преобразование строки в массив строк. В качестве разделителя используется символ (дополнительные два слеша – это следствие двойного экранирования). Объединяем все строки из массива строк, в качестве разделителя используется символ (мы видим его экранированным). Выводим строку на экран. |
Решение 3 — использование метода :
Код | Примечания |
---|---|
Создание объекта Scanner Чтение строки с консоли Просто заменяем один символ на второй (второй — экранирован) Выводим строку на экран. |
Обрезка посредством trim()
Класс Java String содержит метод trim(), который может обрезать строковый объект. Предназначен для удаления в начале и конце строки пробелов, табуляцию и переход на новую строку:
String text = " And he ran across the field "; String trimmed = text.trim();
После выполнения этого кода усеченная переменная будет указывать на экземпляр String со значением
"And he ran across the field"
Пробельные символы в начале и конце объекта String были удалены. Символ пробела внутри строки не был затронут. Имеется в виду между первым и последним символом, не являющимся пробелом.
Метод trim() не изменяет экземпляр String. Вместо этого он возвращает новый объект Java String, который равен объекту String, из которого он был создан, но с удаленным пробелом в начале и конце строки.
Метод trim() может быть очень полезен для обрезки текста, введенного пользователем в поля ввода. Например, пользователь может ввести свое имя и случайно поставить дополнительный пробел после последнего слова или перед первым словом. Метод trim() – это простой способ удалить такие лишние пробелы.
Поиск подстрок
Вторая по популярности операция после сравнения строк — это поиск одной строки в другой. Для этого у класса String тоже есть немного методов:
Методы | Описание |
---|---|
Ищет строку в текущей строке. Возвращает индекс первого символа встретившийся строки. | |
Ищет строку в текущей строке, пропустив первых символов. Возвращает индекс найденного вхождения. | |
Ищет строку в текущей строке с конца. Возвращает индекс первого вхождения. | |
Ищет строку в текущей строке с конца, пропустив первых символов. | |
Проверяет, что текущая строка совпадает с шаблоном, заданным регулярным выражением. |
Методы и часто используются в паре. Первый позволяет найти первое вхождение переданной подстроки в текущей строке. А второй метод позволяет найти второе, третье и т.д. вхождения за счет того, что пропускает первые index символов.
Допустим, у нас есть url типа такого: «https://domen.ru/about/reviews», и мы хотим заменить имя домена на javarush.ru. Домены в урлах могут быть разными, но мы знаем, что:
- Перед именем домена идут два слеша
- После имени домена идет одинарный слеш
Вот как бы выглядел код такой программы:
Код | Примечания |
---|---|
Создание объекта Scanner Чтение строки с консоли Получаем индекс первого вхождения строки Получаем индекс первого вхождения строки , но ищем только после символов . Получаем строку от начала и заканчивая символами Получаем строку от и до конца. Склеиваем строки и новый домен. |
Методы и работают точно так же, только поиск ведется с конца строки к началу.
Creating Strings
The most direct way to create a string is to write −
String greeting = "Hello world!";
Whenever it encounters a string literal in your code, the compiler creates a String object with its value in this case, «Hello world!’.
As with any other object, you can create String objects by using the new keyword and a constructor. The String class has 11 constructors that allow you to provide the initial value of the string using different sources, such as an array of characters.
Example
public class StringDemo { public static void main(String args[]) { char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' }; String helloString = new String(helloArray); System.out.println( helloString ); } }
This will produce the following result −
Output
hello.
Note − The String class is immutable, so that once it is created a String object cannot be changed. If there is a necessity to make a lot of modifications to Strings of characters, then you should use String Buffer & String Builder Classes.
Поиск с помощью indexOf()
Вы можете искать подстроки в Strings, используя метод indexOf():
String string1 = "Hello World"; int index = string1.indexOf("World");
Индексная переменная будет содержать значение 6 после выполнения этого кода. Метод indexOf() возвращает индекс, в котором находится первый символ в первой соответствующей подстроке. В этом случае W совпадающей подстроки World была найдена по индексу 6. Если подстрока не найдена в строке, метод возвращает -1.
Существует версия метода indexOf(), которая берет индекс, с которого начинается поиск. Таким образом, вы можете искать в строке, чтобы найти более одного вхождения подстроки:
String theString = "is this good or is this bad?"; String substring = "is"; int index = theString.indexOf(substring); while(index != -1) { System.out.println(index); index = theString.indexOf(substring, index + 1); }
Этот код просматривает строку «это хорошо или это плохо?» для вхождений подстроки “is”. Для этого используется метод indexOf(substring, index). Параметр index указывает, с какого индекса символа в строке следует начать поиск. В этом примере поиск начинается с 1 символа после индекса, в котором было найдено предыдущее вхождение.
Вывод:
0 5 16 21
Подстрока “is” находится в четырех местах. Два раза в словах «есть» и два раза внутри слова «этот».
Класс Java String также имеет метод lastIndexOf(), который находит последнее вхождение подстроки:
String theString = "is this good or is this bad?"; String substring = "is"; int index = theString.lastIndexOf(substring); System.out.println(index);
Выход – 21, который является индексом последнего вхождения подстроки “is”.
Порядок выполнения операторов
Когда в выражении несколько логических операторов, результат вычисляется с учётом их приоритета. Если нет логических скобок, то операции выполняются в таком порядке:
- ! (NOT)
- & (AND)
- ^ (XOR)
- | (OR)
- && (условный AND)
- || (условный OR)
Если одинаковые операции стоят по соседству, то раньше выполняется та, что левее.
Первый пример
Вычислим true ^ true & false:
- Выбираем самый приоритетный оператор (если таких больше одного — тот, что левее). У нас самый приоритетный & (он здесь такой один).
- Смотрим, что слева и справа от него: это true и false соответственно.
- Вычисляем выражение true & false — получаем false.
- В исходном выражении заменяем true & false результатом его вычисления (false) — и получаем: true ^ false.
- Вычислив это выражение, получаем результат true.
Или короче:
- true ^ true & false
- true ^ false
- true
Второй пример
Заменим & на &&:
Теперь самый приоритетный оператор в выражении это ^ — и порядок вычислений будет уже другой:
- true ^ true && false
- false && false
- false
Методы класса
В начале статьи я упомянул, что наши домашние животные могут перемещаться и есть. В отличие от параметров вроде веса и клички, это уже не свойства объекта, а его функции. В классе эти функции обозначают как методы.
Метод класса — это блок кода, состоящий из ряда инструкций, который можно вызывать по его имени. Он обязательно содержит возвращаемый тип, название, аргументы и тело метода.
Синтаксис метода в Java:
Строка возвращаемыйТип показывает, какого типа данные вернёт метод. Например, если в качестве возвращаемого типа мы поставим тип String, то метод должен будет вернуть строку, а если int — целое число.
Чтобы вернуть значение из метода, используется специальное слово return. Если мы хотим, чтобы метод ничего не возвращал, то вместо возвращаемого типа нужно использовать специальное слово void.
Аргументы — то, что нужно передать в метод при его вызове. Мы можем указать сколько угодно параметров через запятую либо не указывать ни одного.
Для примера напишем простейший метод с именем sum (пока что не в нашем классе Pet), который складывает два переданных числа и возвращает их результат:
Возвращаемый тип метода int, он указан перед именем sum. Далее идут два аргумента a и b, у обоих также указан тип int
Важно помнить, что возвращаемый тип и тип переменных не обязательно должны совпадать
Аргументы метода работают как обычные переменные — за пределами метода к ним никак нельзя получить доступ. Внутри метода мы складываем значения из переменных a и b, записываем полученное значение в переменную c. После этого мы возвращаем значение переменной c — только оно доступно вне метода.
Вот пример:
Мы передали в метод sum два значения 1 и 2, а на выходе получили результат их сложения 3. Также можно создать метод, который принимает значение типа String, а возвращает длину этой строки:
В этом случае у нас возвращаемый типа int, а параметр str — типа String.
Попробуем использовать этот метод:
Также мы можем создать метод, который ничего не возвращает, а просто печатает переданное слово в консоль:
Либо метод, который ничего не принимает на вход, а просто печатает «Привет!»:
В методах, которые ничего не возвращают, слово return можно опустить.
Обратите внимание, что return полностью прекращает выполнение метода:
Теперь попробуем вызвать этот метод, передав в него число 3:
В этом случае мы ничего не увидим в консоли, так как 3 меньше 5, а значит, отработает блок if и произойдёт выход из метода с помощью слова return.
Но если передадим 6, увидим нашу надпись «Привет!»:
Конвертация с помощью String.format()
String.format() – это новый альтернативный метод, который можно использовать для преобразования Integer в объект String. Хотя целью этого метода является форматирование строки, его также можно использовать для преобразования.
Синтаксис
Есть два разных выражения:
public static String format(Locale l, String format, Object… args) public static String format(String format, Object… args)
Параметры
Аргументы для этого метода:
- l: локальный адрес для форматирования;
- format: строка формата, которая включает спецификатор формата и иногда фиксированный текст;
- args: аргументы, которые ссылаются на спецификаторы формата, установленные в параметре format.
Возвращаемое значение
Этот метод возвращает отформатированную строку в соответствии со спецификатором формата и указанными аргументами.
Пример
class Method3 { public static void main(String args[]) { int number = -1234; String str = String.format("%d", number); System.out.println("With format method: string = " + str); } }
Замена символов replace()
Класс Java String содержит метод replace(), который может заменять символы в строке. Он фактически не заменяет символы в существующей строке. Скорее, возвращает новый экземпляр String. Он равен экземпляру String, из которого он был создан, но с заменой указанных символов. Пример:
String source = "123abc"; String replaced = source.replace('a', '@');
После выполнения этого кода замененная переменная будет указывать на строку с текстом:
123@bc
Метод replace() заменит все символы, соответствующие символу, переданному методу в качестве первого параметра, вторым символом, переданным в качестве параметра.
Устройство класса String
Сегодня мы поговорим о классе . Класс String — самый популярный класс в Java после типа int. Он используется абсолютно везде. У него есть куча полезных методов, которые лучше знать, чем не знать.
Класс — единственный класс, кроме примитивных типов, литералы которого можно использовать в ; компилятор по-особому обрабатывает сложение строк и объектов; объекты по-особому хранятся в памяти. В общем, класс — это очень специфический класс.
Также у класса есть куча классов-сателлитов, цель которых — еще больше упростить работу со строками в Java. Когда вы изучите все это, вам действительно станет значительно проще делать многие вещи. Ну а начнем мы с самого сердца этой экосистемы — с устройства класса .
Массив символов
А устроен класс на самом деле очень просто: внутри него находится массив символов (char), который хранит все символы строки. Вот так, например, хранится слово «Привет»:
Важно!
На самом деле все немного не так. Т.к. класс очень важен, в нем используется очень много оптимизаций, и данные хранятся внутри не в виде массива символов, а просто в виде массива байтов.
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.
String Pool
Все строки, которые были заданы в коде в , во время работы программы хранятся в памяти в так называемом . — это специальный массив для хранения строк. Цель его создания — оптимизация хранения строк:
Во-первых, строки, заданные в коде, нужно все-таки где-то хранить. Код — это команды, а данные (тем более такие большие как строки) нужно хранить в памяти отдельно от кода. В коде фигурируют только ссылки на объекты-строки.
Во-вторых, все одинаковые литералы можно хранить в памяти только один раз. Так оно и работает. Когда код вашего класса загружается Java-машиной, все строковые литералы добавляются в , если их там еще нет. Если уже есть, просто используется ссылка на строку из .
Поэтому если в своем коде вы присвоите нескольким -переменным одинаковые литералы, переменные будут содержать одинаковые ссылки. В литерал будет добавлен только один раз, во всех остальных случаях будет браться ссылка на уже загруженную в строку.
Как это примерно работает:
Код | Работа с StringPool |
---|---|
Именно поэтому переменные и будут хранить одинаковые ссылки.
Метод
Ну и самое интересное: вы можете программно добавить любую строку в . Для этого нужно просто вызвать метод у -переменной.
Метод добавит строку в , если ее еще там нет, и вернет ссылку на строку из .
Код | Примечание |
---|---|
Вряд ли вы будете часто пользоваться этим методом, однако о нем любят спрашивать на собеседованиях, поэтому лучше о нем знать, чем не знать.
Некоторые методы работы со строками
Ну и напоследок хотелось бы рассказать о нескольких методах типа .
Метод
Метод позволяет узнать длину строки – сколько в ней символов.
Примеры:
Команда | Примечание |
---|---|
содержит значение | |
содержит значение | |
содержит значение |
Да, методы можно вызывать у всего, что имеет тип , даже у выражения:
Вызов метода у выражения типа
Метод
Метод позволяет преобразовать все символы строки в маленькие (строчные):
Примеры:
Команда | Примечание |
---|---|
содержит строку | |
содержит пустую строку | |
содержит строку |
Метод
Метод позволяет преобразовать все символы строки в большие (заглавные):
Примеры:
Команда | Примечание |
---|---|
содержит строку | |
содержит строку |
Извлечение символов и подстрок
Для извлечения
символов по индексу в классе String определен метод
char charAt(int
index)
Он принимает
индекс, по которому надо получить символов, и возвращает извлеченный символ:
String str = "Java"; char c = str.charAt(2); System.out.println(c); // v
(здесь как и в
массивах первый индекс равен 0).
Если надо
извлечь сразу группу символов или подстроку, то можно использовать метод
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
Он принимает
следующие параметры:
-
srcBegin:
индекс строки, с которого начинается извлечение символов; -
srcEnd:
индекс строки, до которого идет извлечение символов; -
dst:
массив символов, в который будут извлекаться символы; -
dstBegin:
индекс массива dst, с которого надо добавлять извлеченные из строки символы.
String str = "Hello world!"; int start = 6; int end = 11; char dst=new charend - start; str.getChars(start, end, dst, ); System.out.println(dst); // world
Параметры класса
Мы можем создавать поля класса, каждое из которых имеет свой тип.
Поле класса — это переменная, которая описывает какое-либо из свойств данного класса.
Для наших домашних питомцев и полями класса будут вес, кличка и принадлежность к определённому типу (коровы, гуси, собаки и так далее). Очевидно, что здесь вес — это числовая переменная, а кличка и тип — строки символов. Тогда мы можем написать:
Переменные weight, name и type — поля нашего класса Pet, то есть свойства, которые описывают объект этого класса. Таких полей может быть сколько угодно, каждое имеет свой тип, как обычная переменная.
Мы уже пару раз упомянули словосочетание «объект класса». Так говорят, потому что любой объект является экземпляром какого-либо класса. Здесь действует простая аналогия: класс — это как бы чертёж, который описывает объект, его устройство, а объект — реализация чертежа, его материальное воплощение.
Давайте запрограммируем первый объект класса Pet. Пусть это будет кот (type) с кличкой (name) Барсик и весом (weight) 10 (измерение в килограммах).
Сперва необходимо создать переменную типа Pet:
Наш объект pet выглядит как обычная переменная, но в качестве типа указан класс Pet, и в данный момент в нём ничего нет. Инициализируем объект — воспользуемся такой синтаксической конструкцией:
Мы ставим знак равно, пишем ключевое слово new, имя нашего класса и круглые скобки. Принято говорить, что здесь мы вызываем конструктор класса Pet. Пока просто запомним это — о конструкторах и о том, как их использовать, будет рассказано в отдельной статье.
Теперь у нас появилась переменная pet типа Pet, в которой содержится объект класса Pet. Ранее в этом классе мы объявили поля, к которым можно обратиться и занести в них значения.
Чтобы получить доступ к какому-либо полю нашего класса Pet, нужно специальным образом обратиться к переменной pet — поставить точку и вызвать необходимое поле. Например, вот так:
Теперь во всех трёх полях есть по значению, а мы можем получить их из программы, если потребуется, — например, распечатать в консоль:
Изменить значение в любом из полей класса также несложно. Пусть наш кот Барсик слегка потолстеет — добавим к его весу 1 кг:
Как видим, мы просто изменили вес в поле weight, а при выводе получили уже другое значение.
Объединение строк
Для соединения строк можно использовать
операцию сложения («+»):
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
В общем случае вместо пробела здесь
можно ставить любой разделитель в виде строки.
Обратите внимание, что каждый раз при
объединении строк мы получали новую строку как результат объединения
Методы класса Matcher
-
Метод ищет во входном тексте следующее совпадение. Этот метод начинает просмотр или в начале заданного текста, или на первом символе после предыдущего совпадения. Второй вариант возможен только если предыдущий вызов этого метода вернул true и сопоставитель не был сброшен. В любом случае, в случае успешного поиска возвращается булево значение true. Пример этого метода вы можете найти в из части 1.
-
Метод сбрасывает сопоставитель и ищет в тексте следующее совпадение. Просмотр начинается с позиции, задаваемой параметром . В случае успешного поиска возвращается булево значение true. Например, просматривает текст, начиная с позиции (позиция 0 игнорируется). Если параметр содержит отрицательное значение или значение, превышающее длину текста сопоставителя, метод генерирует исключение .
-
Метод пытается сопоставить с шаблоном весь текст. Он возвращает булево значение true, если весь текст соответствует шаблону. Например, код выводит , поскольку символ не является словообразующим символом.
-
Метод пытается сопоставить с шаблоном заданный текст. Этот метод возвращает true, если любая часть текста соответствует шаблону. В отличие от метода , весь текст не должен соответствовать шаблону. Например, выведет , поскольку начало текста состоит только из словообразующих символов.
-
Метод сбрасывает состояние сопоставителя, включая позицию для добавления в конец (сбрасываемую в 0). Следующая операция поиска по шаблону начинается в начале текста сопоставителя. Возвращается ссылка на текущий объект . Например, сбрасывает сопоставитель, на который ссылается .
-
Метод сбрасывает состояние сопоставителя и задает новый текст сопоставителя, равный . Следующая операция поиска по шаблону начинается в начале нового текста сопоставителя. Возвращается ссылка на текущий объект . Например, сбрасывает сопоставитель, на который ссылается и задает в качестве нового текста сопоставителя значение .
Преобразование с использованием Integer.toString(int)
Класс Integer имеет статический метод, который возвращает объект String, представляющий параметр int, указанный в функции Integer.toString(int). Этот подход, в отличие от других, может возвращать исключение NullPointerException.
Синтаксис
Есть два разных выражения для метода Integer.toString():
public static String toString(int i) public static String toString(int i, int radix)
Параметры
Параметры этого метода:
- i: целое число, которое будет преобразовано.
- radix: используемая система счисления базы для представления строки.
Возвращаемое значение
Возвращаемое значение для обоих выражений – строка Java, представляющая целочисленный аргумент «i». Если используется параметр radix, возвращаемая строка определяется соответствующим основанием.
Пример
package MyPackage; public class Method1 { public static void main(String args[]) { int n = Integer.MAX_VALUE; String str1 = Integer.toString(n); System.out.println("The output string is: " + str1); int m = Integer.MIN_VALUE; String str2 = Integer.toString(m); System.out.println("The output string is: " + str2); } }