Oc-windows.ru

IT Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Метод parse java

Руководство по классу Java Integer с примерами

Класс Integer является контейнером для типа данных int . Этот класс включает в себя методы преобразования значений из строки в объект Integer . Данное руководство содержит полную информацию о том, как использовать класс Integer в Java , его атрибуты и методы .

Синтаксис класса Integer

Совместимость с версиями JDK

Необходима JDK версии 1.0

Основы класса Integer

Поскольку класс Integer имеет широкую функциональность, мы решили разделить данное руководство на разделы.

Как создать экземпляр класса Integer

Есть два способа создать экземпляр класса Integer . Первый способ – использовать ключевое слово new :

Второй способ создать — использовать функцию автоупаковки ( autoboxing ) языка Java , которая конвертирует примитивный тип данных в соответствующий класс-обёртку:

Тест на равенство объектов Integer

Объекты Integer являются обёрткой для примитивного типа int . Поскольку они являются объектами, то оператор == не будет работать. Рассмотрим приведенный ниже отрывок кода:

Поскольку мы имеем дело с объектами Integer , оператор == больше не применим. Как же провести сравнение двух Java объектов Integer ? Рассмотрим приведенный ниже отрывок кода, демонстрирующий это:

Java-программа для проверки объектов Integer на равенство

Максимальное и минимальное значения Integer

Чтобы найти максимальное и минимальное значения Integer , мы обратимся к двум его полям. Максимальное значение объекта Integer ( 2147483647 ) может быть найдено с помощью вызова Integer.MAX_VALUE , а минимальное значение Integer (- 2147483648 ) – через обращение к Integer.MIN_VALUE .

Рассмотрим метод parseInt(String s) , который принимает строку в качестве аргумента и конвертирует её в объект Integer . Если мы передадим строковое значение, которое имеет целочисленный эквивалент, превышающее максимальное значение в Integer.MAX_VALUE ? Грубым примером такого сценария может служить приведенный ниже код:

Мы передали в метод parseInt аргумент, который на 1 больше максимального значения. Поэтому если мы попытаемся выполнить этот отрывок кода, компилятор выдаст исключение NumberFormatException :

Как использовать статичные методы класса Integer

Большинство методов класса Integer статичные, поэтому имеет смысл разобраться, как получить доступ к ним. Не статичные методы используются так:

Статические методы не должны использоваться таким образом, а должны вызываться так как показано ниже:

Нестатические методы вызываются через переменная.метод. Статичные вызываются через Integer.метод(аргументы… ).

Поля объекта Integer

МодификаторТипАтрибутОписание
staticIntMAX_VALUEКонстанта, являющаяся максимальным значением данных типа int, равная 2^31-1.
staticIntMIN_VALUEКонстанта, являющаяся минимальным значением данных типа int, равная -2^31.
staticIntSIZEЧисло битов, использованное для представления значения типа int в двоичной форме.
staticClassTYPEЭкземпляр класса, представляющий примитивный тип int.

Конструктор класса Integer

СинтаксисОписание
Integer(int value)Создает новый объект Integer, который представляет указанное целочисленное значение.
Integer(String s)Это создает новый объект Integer, который представляет целочисленное значение, указанное строковым параметром конструктора.

Примеры использования методов класса Integer

МодификаторВозвращаемый типМетодОписание
staticIntbitCount(int i)Этот метод возвращает целочисленное значение, которое соответствует количеству единиц в двоичном представлении числа-аргумента метода.
bytebyteValue()Возвращает значение объекта Integer в виде типа byte. Этот метод переопределяет метод byteValue() класса Number.
staticIntcompare(int x, int y)Метод просто возвращает целочисленное представление результата сравнения двух целочисленных аргументов.
IntcompareTo(Integer anotherInteger)Возвращает целочисленное значение результата сравнения аргумента метода и объекта Integer.
staticIntegerdecode(String nm)Возвращает декодированное значение строкового аргумента в объект Integer.
DoubledoubleValue()Возвращает эквивалент объекта Integer типа double ( java double to integer ). Метод doubleValue() унаследован из класса Number.
booleanequals(Object obj)Возвращает результат сравнения объекта Integer и объекта-аргумента типа Object. Этот метод переопределяет метод equals класса Object.
FloatfloatValue()Возвращает эквивалент объекта Integer в типе float. Метод floatValue унаследован из класса Number.
staticIntegergetInteger(String nm)Возвращает значение свойства, указанного в качестве аргумента, в объекте Integer.
staticIntegergetInteger(String nm, int val)Определяет целочисленное значение свойства, указанного в строковом параметре. Если свойство не найдено, возвращает объект Integer со значением, указанным во втором параметре.
staticIntegergetInteger(String nm, Integer val)Возвращает целочисленное значение свойства, указанного в строковом параметре. Если свойство не найдено, возвращает объект Integer, указанный во втором параметре.
InthashCode()Возвращает хэш-код объекта Integer.
staticInthighestOneBit(int i)Определяет позицию старшего бита. Возвращает значение, в котором установлен только этот бит. Если ни один из битов не установлен, возвращает 0.
IntintValue()Возвращает целочисленный эквивалент объекта Integer. Метод унаследован из класса Number.
LonglongValue()Возвращает значение объекта Integer как тип long.
staticIntlowestOneBit(int i)Возвращает целое число, получающееся, если оставить только младшую (крайнюю правую) единицу в двоичном представлении числа-аргумента.
staticIntnumberOfLeadingZeros(int i)Возвращает количества нулей слева в двоичном представлении числа-аргумента.
staticIntnumberOfTrailingZeros(int i)Возвращает количества нулей справа в двоичном представлении числа-аргумента.
staticIntparseInt(String s)Преобразует строку-аргумент в десятичное число со знаком.
staticIntparseInt(String s, int radix)Преобразует строку-аргумент в целом число со знаком в системе исчисления, указанной во втором аргументе.
staticIntreverse(int i)Возвращает число, получаемое в результате перестановки битов числа-аргумента в обратном порядке.
staticIntreverseBytes(int i)Возвращает число, получаемое в результате перестановки байтов числа-аргумента в обратном порядке.
staticIntrotateLeft(int i, int distance)Возвращает число, полученное в результате сдвига битов числа-аргумента на указанное количество позиций влево. (Биты, вышедшие за пределы слева, возвращаются в правую часть).
staticIntrotateRight(int i, int distance)Возвращает число, полученное в результате сдвига битов числа-аргумента на указанное количество позиций вправо. (Биты, вышедшие за пределы справа, возвращаются в левую часть).
ShortshortValue()Возвращает эквивалент объекта Integer в типе short. Этот метод переопределяет метод shortValue класса Number.
staticintsignum(int i)Возвращает результат функции signum от указанного целого числа.
staticStringtoBinaryString(int i)Возвращает строковый эквивалент двоичного представления числа-аргумента.
staticStringtoHexString(int i)Возвращает строковое представление целочисленного аргумента в виде шестнадцатеричного числа без знака.
staticStringtoOctalString(int i)Возвращает строковое представление целочисленного аргумента в виде восьмеричного числа без знака.
StringtoString()Возвращает объект String, представляющий значение объекта Integer.
staticStringtoString(int i)Возвращает объект String, представляющий значение целочисленного аргумента.
staticStringtoString(int i, int radix)Возвращает строковый эквивалент целого десятичного числа-аргумента в указанной системе исчисления.
staticIntegervalueOf(int i)Возвращает экземпляр объекта Integer, представляющий указанное целое число.
staticIntegervalueOf(String s)Возвращает экземпляр объекта Integer, содержащий значение, указанное в строке-аргументе.
staticIntegervalueOf(String s, int radix)Возвращает экземпляр объекта Integer, содержащий значение, передаваемое в строке-аргументе в системе исчисления, указанной во втором параметре.

Данная публикация представляет собой перевод статьи « Java Integer Class Tutorial and Example » , подготовленной дружной командой проекта Интернет-технологии.ру

Обработка строк в Java. Часть II: Pattern, Matcher

Вступление

Что Вы знаете о обработке строк в Java? Как много этих знаний и насколько они углублены и актуальны? Давайте попробуем вместе со мной разобрать все вопросы, связанные с этой важной, фундаментальной и часто используемой частью языка. Наш маленький гайд будет разбит на две публикации:

  1. String, StringBuffer, StringBuilder (реализация строк)
  2. Pattern, Matcher (регулярные выражения)

Сегодня поговорим о регулярных выражениях в Java, рассмотрим их механизм и подход к обработке. Также рассмотрим функциональные возможности пакета java.util.regex.

Регулярные выражения

Большинство современных языков программирования поддерживают РВ, Java не является исключением.

Механизм

Существует две базовые технологии, на основе которых строятся механизмы РВ:

  • Недетерминированный конечный автомат (НКА) — «механизм, управляемый регулярным выражением»
  • Детерминированный конечный автомат (ДКА) — «механизм, управляемый текстом»

НКА — механизм, в котором управление внутри РВ передается от компонента к компоненту. НКА просматривает РВ по одному компоненту и проверяет, совпадает ли компонент с текстом. Если совпадает — проверятся следующий компонент. Процедура повторяется до тех пор, пока не будет найдено совпадение для всех компонентов РВ (пока не получим общее совпадение).

ДКА — механизм, который анализирует строку и следит за всеми «возможными совпадениями». Его работа зависит от каждого просканированного символа текста (то есть ДКА «управляется текстом»). Даний механизм сканирует символ текста, обновляет «потенциальное совпадение» и резервирует его. Если следующий символ аннулирует «потенциальное совпадение», то ДКА возвращается к резерву. Нет резерва — нет совпадений.

Логично, что ДКА должен работать быстрее чем НКА (ДКА проверяет каждый символ текста не более одного раза, НКА — сколько угодно раз пока не закончит разбор РВ). Но НКА предоставляет возможность определять ход дальнейших событий. Мы можем в значительной степени управлять процессом за счет правильного написания РВ.

Регулярные выражения в Java используют механизм НКА.

Эти виды конечных автоматов более детально рассмотрены в статье «Регулярные выражения изнутри».

Подход к обработке

В языках программирования существует три подхода к обработке РВ:

  • интегрированный
  • процедурный
  • объектно-ориентированный

Интегрированный подход — встраивание РВ в низкоуровневый синтаксис языка. Этот подход скрывает всю механику, настройку и, как следствие, упрощает работу программиста.
Функциональность РВ при процедурном и объектно-ориентированном подходе обеспечивают функции и методы соответственно. Вместо специальных конструкций языка, функции и методы принимают в качестве параметров строки и интерпретируют их как РВ.

Для обработки регулярных выражений в Java используют объектно-ориентированный подход.

Реализация

Pattern

Класс Pattern представляет собой скомпилированное представление РВ. Класс не имеет публичных конструкторов, поэтому для создания объекта данного класса необходимо вызвать статический метод compile и передать в качестве первого аргумента строку с РВ:

Также в качестве второго параметра в метод compile можно передать флаг в виде статической константы класса Pattern, например:

Таблица всех доступных констант и эквивалентных им флагов:

ConstantEquivalent Embedded Flag Expression
1Pattern.CANON_EQ
2Pattern.CASE_INSENSITIVE(?i)
3Pattern.COMMENTS(?x)
4Pattern.MULTILINE(?m)
5Pattern.DOTALL(?s)
6Pattern.LITERAL
7Pattern.UNICODE_CASE(?u)
8Pattern.UNIX_LINES(?d)

Иногда нам необходимо просто проверить есть ли в строке подстрока, что удовлетворяет заданному РВ. Для этого используют статический метод matches, например:

Также иногда возникает необходимость разбить строку на массив подстрок используя РВ. В этом нам поможет метод split:

Matcher и MatchResult

Matcher — класс, который представляет строку, реализует механизм согласования (matching) с РВ и хранит результаты этого согласования (используя реализацию методов интерфейса MatchResult). Не имеет публичных конструкторов, поэтому для создания объекта этого класса нужно использовать метод matcher класса Pattern:

Но результатов у нас еще нет. Чтобы их получить нужно воспользоваться методом find. Можно использовать matches — этот метод вернет true только тогда, когда вся строка соответствует заданному РВ, в отличии от find, который пытается найти подстроку, которая удовлетворяет РВ. Для более детальной информации о результатах согласования можно использовать реализацию методов интерфейса MatchResult, например:

Формат JSON, метод toJSON

Допустим, у нас есть сложный объект, и мы хотели бы преобразовать его в строку, чтобы отправить по сети или просто вывести для логирования.

Естественно, такая строка должна включать в себя все важные свойства.

Мы могли бы реализовать преобразование следующим образом:

…Но в процессе разработки добавляются новые свойства, старые свойства переименовываются и удаляются. Обновление такого toString каждый раз может стать проблемой. Мы могли бы попытаться перебрать свойства в нём, но что, если объект сложный, и в его свойствах имеются вложенные объекты? Мы должны были бы осуществить их преобразование тоже.

К счастью, нет необходимости писать код для обработки всего этого. У задачи есть простое решение.

JSON.stringify

JSON (JavaScript Object Notation) – это общий формат для представления значений и объектов. Его описание задокументировано в стандарте RFC 4627. Первоначально он был создан для JavaScript, но многие другие языки также имеют библиотеки, которые могут работать с ним. Таким образом, JSON легко использовать для обмена данными, когда клиент использует JavaScript, а сервер написан на Ruby/PHP/Java или любом другом языке.

JavaScript предоставляет методы:

  • JSON.stringify для преобразования объектов в JSON.
  • JSON.parse для преобразования JSON обратно в объект.

Например, здесь мы преобразуем через JSON.stringify данные студента:

Метод JSON.stringify(student) берёт объект и преобразует его в строку.

Полученная строка json называется JSON-форматированным или сериализованным объектом. Мы можем отправить его по сети или поместить в обычное хранилище данных.

Обратите внимание, что объект в формате JSON имеет несколько важных отличий от объектного литерала:

  • Строки используют двойные кавычки. Никаких одинарных кавычек или обратных кавычек в JSON. Так ‘John’ становится «John» .
  • Имена свойств объекта также заключаются в двойные кавычки. Это обязательно. Так age:30 становится «age»:30 .

JSON.stringify может быть применён и к примитивам.

JSON поддерживает следующие типы данных:

  • Объекты
  • Массивы [ . ]
  • Примитивы:
    • строки,
    • числа,
    • логические значения true/false ,
    • null .

JSON является независимой от языка спецификацией для данных, поэтому JSON.stringify пропускает некоторые специфические свойства объектов JavaScript.

  • Свойства-функции (методы).
  • Символьные свойства.
  • Свойства, содержащие undefined .

Обычно это нормально. Если это не то, чего мы хотим, то скоро мы увидим, как можно настроить этот процесс.

Самое замечательное, что вложенные объекты поддерживаются и конвертируются автоматически.

Важное ограничение: не должно быть циклических ссылок.

Здесь преобразование завершается неудачно из-за циклической ссылки: room.occupiedBy ссылается на meetup , и meetup.place ссылается на room :

Исключаем и преобразуем: replacer

Полный синтаксис JSON.stringify :

В большинстве случаев JSON.stringify используется только с первым аргументом. Но если нам нужно настроить процесс замены, например, отфильтровать циклические ссылки, то можно использовать второй аргумент JSON.stringify .

Если мы передадим ему массив свойств, будут закодированы только эти свойства.

Здесь мы, наверное, слишком строги. Список свойств применяется ко всей структуре объекта. Так что внутри participants – пустые объекты, потому что name нет в списке.

Давайте включим в список все свойства, кроме room.occupiedBy , из-за которого появляется цикличная ссылка:

Теперь всё, кроме occupiedBy , сериализовано. Но список свойств довольно длинный.

К счастью, в качестве replacer мы можем использовать функцию, а не массив.

Функция будет вызываться для каждой пары (key, value) , и она должна возвращать заменённое значение, которое будет использоваться вместо исходного. Или undefined , чтобы пропустить значение.

В нашем случае мы можем вернуть value «как есть» для всего, кроме occupiedBy . Чтобы игнорировать occupiedBy , код ниже возвращает undefined :

Обратите внимание, что функция replacer получает каждую пару ключ/значение, включая вложенные объекты и элементы массива. И она применяется рекурсивно. Значение this внутри replacer – это объект, который содержит текущее свойство.

Первый вызов – особенный. Ему передаётся специальный «объект-обёртка»: <"": meetup>. Другими словами, первая (key, value) пара имеет пустой ключ, а значением является целевой объект в общем. Вот почему первая строка из примера выше будет «:[object Object]» .

Идея состоит в том, чтобы дать как можно больше возможностей replacer – у него есть возможность проанализировать и заменить/пропустить даже весь объект целиком, если это необходимо.

Форматирование: space

Третий аргумент в JSON.stringify(value, replacer, space) – это количество пробелов, используемых для удобного форматирования.

Ранее все JSON-форматированные объекты не имели отступов и лишних пробелов. Это нормально, если мы хотим отправить объект по сети. Аргумент space используется исключительно для вывода в удобочитаемом виде.

Ниже space = 2 указывает JavaScript отображать вложенные объекты в несколько строк с отступом в 2 пробела внутри объекта:

Параметр space применяется для логирования и красивого вывода.

Пользовательский «toJSON»

Как и toString для преобразования строк, объект может предоставлять метод toJSON для преобразования в JSON. JSON.stringify автоматически вызывает его, если он есть.

Как видим, date (1) стал строкой. Это потому, что все объекты типа Date имеют встроенный метод toJSON , который возвращает такую строку.

Теперь давайте добавим собственную реализацию метода toJSON в наш объект room (2) :

Java 8 Ссылки на методы

Данная статья написана командой Vertex Academy. Это одна из статей из нашего Учебника по Java 8. Надеемся, что данная статья Вам будет полезна. Приятного прочтения!

В этой статье мы рассмотрим ссылки на методы в Java 8

1. Введение

С приходом Java 8 стало возможным писать код в декларативном стиле с помощью ссылок на методы. По сути, это та же лямбда, только круче

Для использования необходимо написать оператор ::

2. forEach

Ссылки на методы позволяют упростить код

Работают ссылки на методы при условии, что параметры вызываемого метода и параметры в лямбде совпадают.

3. Function

Cобственный метод и лямбда

Cобственный метод и ссылка на метод

4. Конструкторы

Помимо методов, так же можно передавать ссылки на конструкторы.

Для этого создадим класс User

и интерфейс UserFactory

Теперь же, вместо реализации интерфейса используем ссылку на конструктор User

5. Больше примеров

5.1 Function composition

Ссылки на методы смотрятся еще лучше при цепочке обращений.

Где мы сначала декларативно описываем необходимые действия, и уже после вызываем всю цепочку.

5.2 Comparator

Создадим класс User

И тепер вывести отсортированный список не составляет труда (и кода)

Где мы отсортировали список по имени

Надеемся, что наша статья была Вам полезна. Также есть возможность записаться на наши курсы по Java в Киеве. Детальную информацию Вы можете найти у нас на сайте.

Читать еще:  Java util timer
Ссылка на основную публикацию
Adblock
detector