Применение StringTokenizer для лексического анализа строк в Java.

Лексический анализ (токенизация) строки заключается в разборе входной последовательности символов на распознанные группы (лексемы),  с целью получения на выходе идентифицированных последовательностей (токенов).

Класс StringTokenizer, входящий в пакет java.util, обеспечивает возможность разбиения строки на отдельные лексемы, используя определенный набор разделителей. Читать далее Применение StringTokenizer для лексического анализа строк в Java.

Скриншот узла или сцены в JavaFX (scene or node snapshot)

JavaFX logo

Начиная с версии 2.2 в JavaFX появился инструмент, обеспечивающий удобный способ производства снимка экрана. Более того, «снимаемый» объект не обязательно должен быть отображен на экране, что позволяет использовать этот инструмент для компоновки отчетов с различными рисунками, графиками, таблицами и текстовыми областями с дальнейшим сохранением в виде рисунка. Читать далее Скриншот узла или сцены в JavaFX (scene or node snapshot)

Перечисления в Java (Java Enum)

Перечисления (Enum) были введены в Java начиная с версии 1.5 с целью улучшения контроля за типобезопасностью (невозможно назначить переменной значение извне заданного множества допустимых значений). До этого для реализации перечислений предлагалось использовать классы со статическими константами.

Типичный пример использования enum для описания типа данных, хранящего карточную масть:

public class EnumExample_01 {
	enum Cardsuit { CLUBS, DIAMONDS, SPADES, HEARTS }
	
	public static void main(String[] args) {
		Cardsuit cs = Cardsuit.HEARTS;
		if(cs == Cardsuit.HEARTS)
			System.out.println("Черви");
	}
}

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

Одной из наиболее ценной возможностью применения перечислений в Java является использование его внутри оператора switch: Читать далее Перечисления в Java (Java Enum)

Настройка строковых элементов в формате даты (Java)

Как настроить вывод названия месяца в родительном или именительном падеже?
Как настроить вывод короткого имени дня недели в верхнем регистре?
И другие вопросы настройки форматирования символов формата даты.

На первый вопрос ответ прост. Для именительного падежа названия месяца использовать в SimpleDateFormat шаблон «LLLL», а для родительного — «MMMM». (например «Декабрь» и «декабря» соответственно).

В общем случае, если не нравятся символы, используемые в DateFormat или SimpleDateFormat для представления названия месяца, дня недели, временной зоны и др., то их можно заменить на свои. Для этого нужно использовать DateFormatSymbols, который используется для их инкапсуляции непосредственно в DateFormat и SimpleDateFormat. Читать далее Настройка строковых элементов в формате даты (Java)

Форматирование даты в Java с помощью SimpleDateFormat

Для форматирования ввода и вывода даты в Java до введения нового Date Time API (https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html), который был введен в Java 8, использовался класс SimpleDateFormat.

SimpleDateFormat является подклассом DateFormat, который позволяет форматировать ввод-вывод  даты и времени в рамках предопределенных стилей.  В отличие от DateFormat, SimpleDateFormat позволяет создавать собственные настраиваемые форматы ввода-вывода. Читать далее Форматирование даты в Java с помощью SimpleDateFormat

Отключение логирования в готовом приложении

Обычно в debug-версии приложения вываливается в LogCat куча полезной для разработчика информации, которую желательно скрывать в релизе. Да и зачем загаживать LogCat отладочной информацией? Однако ручное удаление (или комментирование) методов вызова журналирования превращается в утомительную процедуру. Поэтому стоит обеспечить возможность автоматического отключения вывода лишней информации в LogCat для release-версии приложения.

Помимо ручного выпиливания есть ряд простых способов обеспечивающих отключение излишнего логирования.

Читать далее Отключение логирования в готовом приложении

Описание структуры XML документа средствами DTD – Document Type Definition

Шпаргалка по DTD.

DTD – Один из способов формализованного описания схемы документа XML, сделанного на языке, понятном программе-анализатору.

В настоящее время идет отказ от использования DTD в пользу XSD (XML Schema Definition), по ряду причин:

  • DTD использует отличный от XML синтаксис.
  • Отсутствует типизация узлов.
  • Отсутствует поддержка пространств имён.

Тем не менее этот способ ещё широко применяется поскольку является более простым и удобным для описания несложных схем документов.

Читать далее Описание структуры XML документа средствами DTD – Document Type Definition

Android Studio 3.0 решение проблемы «AAPT2 error»

Android logo

При попытке компиляции старых проектов или создании нового после обновления Android Studio до версии 3.0 вываливаются ошибки следующего вида:

Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:Execution failed for task ':app:mergeDebugResources'.
> Error: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details

Связано это с тем, что теперь по умолчанию используется AAPT2 (Android Asset Packaging Tool 2.0) и для решения проблемы обычно предлагают просто отказаться от неё. Это решение работает, однако это не решение самой проблемы, а лишь «кривой костыль». Читать далее Android Studio 3.0 решение проблемы «AAPT2 error»

Запись и просмотр логов при помощи Logcat

Окно Logcat в Android Studio отображает логи в режиме реального времени и сохраняет историю, чтобы можно было просматривать старые сообщения. Стоит отметить, что по умолчанию LogCat показывает журнал, связанный с последним запущенным приложением.

Для открытия окна LogCat необходимо открыть меню Window -> Show View -> Other и во вкладке android выбрать LogCat.

Читать далее Запись и просмотр логов при помощи Logcat

Управление порядком выполнения JUnit тестов. Аннотация @FixMethodOrder.

Логотип JUnit
Порядок выполнения JUnit тестов не гарантируется и даже может меняться от запуска к запуску. Однако начиная с JUnit 4.11, порядок запуска тестов по умолчанию детерминирован и определяется хэш-кодом имени тестового метода (в порядке возрастания), в случае равенства хэш-кодов, приоритет отдается согласно лексикографическому порядку сортировки имен.

Для обеспечения контроля за порядком выполнения тестов в JUnit предоставлена аннотация для тестового класса – @FixMethodOrder. В зависимости от параметра этой аннотации можно получить три различных варианта поведения:

  • Детерминированный, основанный на hashcode. Это порядок по умолчанию.
  • В порядке возрастания имени метода
  • Порядок обеспечиваемый JVM. Порядок запуска может меняться от запуска к запуску.

Читать далее Управление порядком выполнения JUnit тестов. Аннотация @FixMethodOrder.