Вопросы и ответы по Java
Готовые ответы на частые вопросы по Java: короткое решение и примеры кода.
Строки
- Как закодировать и раскодировать Base64Кодирование и декодирование Base64 в Java: Base64.getEncoder, вариант для URL и кодировка UTF-8.
- Как заменить текст в строкеЗамена текста в строке Java: replace, replaceAll с регулярным выражением, replaceFirst и замена нескольких слов.
- Как записать многострочную строкуМногострочные строки в Java: текстовые блоки, отступы, подстановка значений через formatted.
- Как извлечь числа из строкиИзвлечение чисел из текста в Java: Pattern и Matcher, results(), дробные и отрицательные числа.
- Как найти позицию подстроки в строкеПоиск позиции подстроки в Java: indexOf, lastIndexOf, поиск всех вхождений и вырезание части строки.
- Как найти совпадения по регулярному выражениюРегулярные выражения в Java: Pattern, Matcher, группы, именованные группы и замена с группами.
- Как обрезать строку до нужной длиныОбрезка строки в Java до заданной длины с многоточием, по границе слова и без ошибки на коротких строках.
- Как объединить строки через разделительОбъединение строк в Java: String.join, Collectors.joining, StringJoiner и StringBuilder.
- Как перевернуть строкуРазворот строки в Java через StringBuilder.reverse(), цикл и с учётом эмодзи.
- Как перевести camelCase в snake_case и обратноПреобразование camelCase в snake_case и обратно в Java с помощью регулярных выражений.
- Как подставить значения в строкуФорматирование строк в Java: String.format, formatted, ширина, выравнивание и числа с точностью.
- Как посчитать вхождения символа или подстрокиПодсчёт вхождений символа и подстроки в строке Java: chars(), indexOf в цикле и частоты всех символов.
- Как посчитать слова в строкеПодсчёт слов в строке Java: split по пробелам, пустая строка и частота каждого слова.
- Как правильно сравнивать строкиСравнение строк в Java: почему нельзя использовать ==, как работают equals, equalsIgnoreCase и compareTo.
- Как превратить строку в массив символов и обратноСтрока в массив char и обратно в Java: toCharArray, String.valueOf, chars() и сортировка букв.
- Как преобразовать строку в число и обратноПреобразование строки в int, long и double в Java и обратно: parseInt, valueOf и обработка неверного ввода.
- Как проверить начало или конец строкиПроверка начала и конца строки в Java: startsWith, endsWith, без учёта регистра и со смещением.
- Как проверить emailПроверка адреса электронной почты в Java регулярным выражением и чего от такой проверки ждать.
- Как проверить, содержит ли строка подстрокуПоиск подстроки в Java: contains, indexOf, без учёта регистра и поиск одного из нескольких слов.
- Как проверить, что строка — числоПроверка строки на число в Java: parseInt с перехватом исключения, регулярные выражения и Character.isDigit.
- Как проверить, что строка пустаяПроверка строки на пустоту в Java: isEmpty, isBlank и защита от null.
- Как проверить, является ли строка палиндромомПроверка палиндрома в Java: StringBuilder.reverse, два указателя и фразы со знаками препинания.
- Как разбить строку на частиРазбиение строки в Java через split(): по разделителю, по пробелам, с лимитом и спецсимволами.
- Как разбить текст на строкиРазбиение многострочного текста в Java через lines(), split и обработка разных переводов строк.
- Как сгенерировать случайную строкуГенерация случайной строки в Java: SecureRandom для токенов, свой набор символов и UUID.
- Как сделать первую букву заглавнойПервая буква строки в верхнем регистре в Java: substring, каждое слово с заглавной и защита от пустой строки.
- Как сделать slug из строкиСоздание slug для URL в Java: нижний регистр, удаление диакритики через Normalizer и замена пробелов на дефисы.
- Как скрыть часть строки звёздочкамиМаскирование номера карты, телефона и email в Java через substring и repeat.
- Как сравнить строки без учёта регистраСравнение строк без учёта регистра в Java: equalsIgnoreCase, compareToIgnoreCase и сортировка.
- Как убрать пробелы в начале и конце строкиУдаление пробелов по краям строки в Java: strip, trim, stripLeading и stripTrailing.
- Как удалить все пробелы из строкиУдаление всех пробелов, табуляций и переводов строк из строки Java через replace и replaceAll.
- Как удалить последний символ строкиУдаление последнего символа строки в Java: substring, StringBuilder.deleteCharAt и удаление лишней запятой.
Числа
- Как вычислить факториалФакториал в Java: цикл, рекурсия, поток и BigInteger для больших значений.
- Как дополнить число нулями слеваВедущие нули в Java: String.format с шаблоном %05d, номера заказов и время.
- Как использовать битовые флагиБитовые флаги в Java: константы-степени двойки, установка, проверка и сброс бита операторами |, & и ~, и замена флагов на EnumSet.
- Как обнаружить переполнение целого числаПереполнение int и long в Java: что происходит, Math.addExact, multiplyExact и переход на long.
- Как ограничить число диапазономОграничение числа минимумом и максимумом в Java: Math.clamp, Math.min и Math.max.
- Как округлить число вверх или внизОкругление в Java: Math.ceil, Math.floor, Math.round, отбрасывание дробной части и отрицательные числа.
- Как округлить число до двух знаков после запятойОкругление до двух знаков в Java: Math.round, BigDecimal.setScale и форматирование для вывода.
- Как отформатировать ценуВывод денежной суммы в Java: NumberFormat для валют, символ валюты, разделители и локаль.
- Как отформатировать число с разделителями тысячРазделители тысяч в Java: String.format с флагом запятой, NumberFormat и DecimalFormat.
- Как перевести число в двоичную или шестнадцатеричную системуСистемы счисления в Java: toBinaryString, toHexString, parseInt с основанием и HexFormat.
- Как посчитать процентПроценты в Java: процент от числа, доля в процентах, изменение в процентах и деление целых чисел.
- Как преобразовать double в intПреобразование double в int в Java: приведение типа, округление, большие значения и NaN.
- Как проверить, что число простоеПроверка простого числа в Java: перебор делителей до корня, поиск простых чисел в диапазоне и BigInteger.
- Как проверить, что число чётноеПроверка чётности числа в Java: оператор остатка, отрицательные числа и побитовая проверка.
- Как работать с очень большими целыми числамиБольшие целые числа в Java: границы int и long, BigInteger и его арифметика.
- Как сгенерировать случайное числоСлучайные числа в Java: Random.nextInt в диапазоне, дробные числа, повторяемая последовательность и SecureRandom.
- Как считать деньги в JavaРабота с деньгами в Java через BigDecimal: создание из строки, сложение, умножение, деление и сравнение.
Массивы
- Как вывести массив на экранПечать массива в Java: Arrays.toString, deepToString для двумерных массивов, свой формат и цикл.
- Как добавить элемент в массивДобавление элемента в массив Java: почему размер фиксирован, Arrays.copyOf, вставка в середину и ArrayList.
- Как заполнить массив значениямиЗаполнение массива в Java: значения по умолчанию, Arrays.fill, Arrays.setAll и диапазон чисел.
- Как найти максимум и минимум в массивеМаксимальное и минимальное значение массива в Java: цикл, IntStream.max, summaryStatistics и массив объектов.
- Как найти сумму и среднее значение массиваСумма и среднее массива в Java: цикл, Arrays.stream().sum(), average() и переполнение.
- Как объединить два массиваОбъединение массивов в Java: Arrays.copyOf с System.arraycopy, потоки и объединение без повторов.
- Как отсортировать массивСортировка массива в Java: Arrays.sort для чисел и строк, по убыванию, часть массива и по полю объекта.
- Как перебрать массив с индексомПеребор массива в Java: цикл for с индексом, for-each, IntStream.range и обход в обратном порядке.
- Как преобразовать массив в список и обратноМассив в List и List в массив в Java: Arrays.asList, List.of, new ArrayList, toArray и массивы примитивов.
- Как проверить, есть ли значение в массивеПоиск значения в массиве Java: цикл, поток anyMatch, Arrays.asList.contains и бинарный поиск.
- Как развернуть массивРазворот массива в Java: обмен элементов в цикле, Collections.reverse и List.reversed.
- Как скопировать массивКопирование массива в Java: clone, Arrays.copyOf, copyOfRange, System.arraycopy и глубокое копирование.
- Как сравнить два массиваСравнение массивов в Java: Arrays.equals, deepEquals для вложенных массивов, mismatch и сравнение без учёта порядка.
Коллекции
- Как использовать очередь и стекОчередь и стек в Java: ArrayDeque для FIFO и LIFO, PriorityQueue и почему не стоит брать класс Stack.
- Как найти дубликаты в спискеПоиск повторяющихся элементов в Java: Set.add, группировка с подсчётом и проверка, есть ли повторы.
- Как найти максимум и минимум в спискеНаибольший и наименьший элемент списка в Java: Collections.max, Stream.max, по полю объекта и пустой список.
- Как найти общие элементы и разницу двух списковПересечение и разность списков в Java: retainAll, removeAll и потоки с HashSet.
- Как объединить два спискаОбъединение списков в Java: addAll, Stream.concat, объединение без повторов и чередование элементов.
- Как объединить две MapОбъединение Map в Java: putAll, merge для суммирования значений и потоки с функцией слияния.
- Как отсортировать список объектов по полюСортировка списка объектов в Java: Comparator.comparing, по убыванию, по строковому полю и без изменения исходного списка.
- Как отсортировать список по нескольким полямСортировка по нескольким полям в Java: thenComparing, разный порядок для полей и значения null.
- Как отсортировать Map по значениюСортировка Map по значению в Java: поток entrySet, comparingByValue и LinkedHashMap для сохранения порядка.
- Как отсортировать Map по ключуСортировка Map по ключам в Java: TreeMap, обратный порядок и сортировка в потоке.
- Как перебрать MapПеребор Map в Java: entrySet, forEach, только ключи или значения и порядок обхода.
- Как перемешать списокПеремешивание списка в Java: Collections.shuffle, повторяемое перемешивание и случайный элемент.
- Как получить значение из Map со значением по умолчаниюЗначение по умолчанию в Map: getOrDefault, putIfAbsent, computeIfAbsent и разница с get.
- Как получить первый и последний элемент спискаПервый и последний элемент списка в Java: getFirst и getLast из Java 21, get по индексу и пустой список.
- Как поменять местами ключи и значения в MapИнверсия Map в Java: toMap с перестановкой, повторяющиеся значения и группировка ключей.
- Как посчитать количество повторений элементовПодсчёт повторений в списке Java: Collections.frequency, groupingBy с counting и Map.merge.
- Как посчитать элементы по значениям enumПодсчёт по enum в Java: EnumMap с merge, groupingBy с EnumMap, нули для отсутствующих значений и порядок вывода.
- Как проверить, есть ли ключ в MapПроверка ключа и значения в Map: containsKey, containsValue и почему get не всегда подходит.
- Как проверить, есть ли элемент в спискеПоиск элемента в списке Java: contains, indexOf, anyMatch по условию и быстрая проверка через HashSet.
- Как разбить список на страницыПагинация списка в Java: subList, skip и limit, количество страниц и выход за границы.
- Как разбить список на частиРазбиение списка на части фиксированного размера в Java: subList в цикле и потоки.
- Как развернуть списокРазворот списка в Java: Collections.reverse, List.reversed из Java 21 и обратный порядок сортировки.
- Как сделать простой LRU-кешКеш с вытеснением давно неиспользуемых записей в Java на основе LinkedHashMap и removeEldestEntry.
- Как создать неизменяемую коллекциюНеизменяемые коллекции в Java: List.of, Set.of, Map.of, List.copyOf и отличие от unmodifiableList.
- Как создать списокСоздание списка в Java: ArrayList для изменяемого списка, List.of для неизменяемого и копирование.
- Как сравнить два спискаСравнение списков в Java: equals с учётом порядка, без учёта порядка и сравнение содержимого как множеств.
- Как удалить дубликаты из спискаУдаление повторов из списка в Java: LinkedHashSet, distinct(), уникальность по полю и порядок элементов.
- Как удалить элемент из спискаУдаление из списка в Java: remove по индексу и по значению, removeIf по условию и удаление в цикле.
Stream API
- Как взять первые N элементовПервые N элементов в Java: limit, skip, subList и takeWhile.
- Как найти первый элемент по условиюПоиск элемента по условию в Java: filter с findFirst, работа с Optional и цикл.
- Как найти сумму спискаСумма элементов списка в Java: mapToInt().sum(), сумма поля объектов, BigDecimal и reduce.
- Как оставить уникальные объекты по полюУникальность объектов по одному полю в Java: toMap с LinkedHashMap, фильтр с Set и TreeSet с компаратором.
- Как отфильтровать списокФильтрация списка в Java: Stream.filter, несколько условий, фильтр по полю объекта и removeIf.
- Как посчитать среднее значение спискаСреднее арифметическое в Java: average(), пустой список, среднее по полю и по группам.
- Как превратить список в строкуСписок в строку в Java: String.join, Collectors.joining для чисел и объектов, префикс и суффикс.
- Как превратить список в MapСписок в Map в Java: Collectors.toMap, Function.identity, повторяющиеся ключи и сохранение порядка.
- Как превратить список списков в один списокОбъединение вложенных списков в Java: flatMap, вложенные поля объектов и массивы.
- Как преобразовать каждый элемент спискаПреобразование элементов списка в Java: Stream.map, извлечение поля, replaceAll и mapToInt.
- Как проверить, что все элементы подходят под условиеПроверка элементов в Java: allMatch, anyMatch, noneMatch и поведение на пустом списке.
- Как разделить список на две части по условиюРазделение списка на подходящие и неподходящие элементы в Java через Collectors.partitioningBy.
- Как сгруппировать список по полюГруппировка в Java через Collectors.groupingBy: списки по ключу, подсчёт, отображение и сортированные ключи.
- Как создать последовательность чиселДиапазоны чисел в Java: IntStream.range, rangeClosed, iterate с шагом и бесконечные потоки.
Классы и объекты
- Как вывести объект в читаемом видеМетод toString в Java: зачем переопределять, записи, форматирование и скрытие секретных полей.
- Как правильно реализовать equals и hashCodeequals и hashCode в Java: правила, Objects.hash, записи и что ломается в HashSet без hashCode.
- Как преобразовать объект в JSON и обратноJSON в Java: библиотеки Jackson и Gson, сериализация записей, чтение JSON в объект и список.
- Как преобразовать строку в enum и перебрать значенияРабота с enum в Java: valueOf, values, name, безопасное преобразование и поля у констант.
- Как проверить тип объектаПроверка типа в Java: instanceof с шаблоном, switch по типам и getClass.
- Как сделать объекты сравнимымиИнтерфейс Comparable в Java: compareTo, естественный порядок, сортировка и TreeSet.
- Как сделать строитель для объектаШаблон «Строитель» в Java: вложенный класс Builder, значения по умолчанию и проверка обязательных полей.
- Как скопировать объектКопирование объектов в Java: конструктор копирования, записи, поверхностная и глубокая копия.
- Как создать неизменяемый классНеизменяемые объекты в Java: record, final-поля, защитные копии коллекций и методы with.
- Как создать синглтонСинглтон в Java: enum с одним значением, ленивая инициализация через holder-класс и когда синглтон не нужен.
Дата и время
- Как вывести длительность в часах и минутахФорматирование длительности в Java: Duration, toHoursPart, toMinutesPart и вывод вида 01:05:09.
- Как вычислить возраст по дате рожденияРасчёт возраста в Java: Period.between, ChronoUnit.YEARS и день рождения 29 февраля.
- Как найти разницу между датамиРазница между датами в Java: ChronoUnit.DAYS.between, Period для лет и месяцев, Duration для часов и минут.
- Как отформатировать датуФорматирование даты в Java: DateTimeFormatter.ofPattern, символы шаблона, названия месяцев и локализованные форматы.
- Как перевести время в другой часовой поясЧасовые пояса в Java: ZonedDateTime, withZoneSameInstant, ZoneId и переход на летнее время.
- Как получить первый и последний день месяцаНачало и конец месяца в Java: withDayOfMonth, TemporalAdjusters, YearMonth и количество дней в месяце.
- Как получить текущую дату и времяТекущая дата и время в Java: LocalDate.now, LocalDateTime.now, часовые пояса и Instant.
- Как преобразовать строку в датуРазбор даты из строки в Java: LocalDate.parse, свой шаблон, дата со временем и обработка ошибок.
- Как преобразовать timestamp в датуUnix timestamp в Java: Instant.ofEpochSecond, миллисекунды, перевод в LocalDateTime и обратно.
- Как прибавить дни к датеАрифметика дат в Java: plusDays, minusDays, plusMonths, рабочие дни и неизменяемость LocalDate.
- Как сравнить две датыСравнение дат в Java: isBefore, isAfter, isEqual, compareTo, сортировка и проверка диапазона.
- Как узнать день неделиДень недели в Java: getDayOfWeek, название на нужном языке, номер дня и проверка выходных.
Файлы и ввод-вывод
- Как дописать текст в конец файлаДописывание в файл в Java: StandardOpenOption.APPEND, создание файла при отсутствии и журнал событий.
- Как записать текст в файлЗапись в файл в Java: Files.writeString, запись списка строк, BufferedWriter и перезапись файла.
- Как записать CSV-файлЗапись CSV в Java: заголовок, строки из объектов, экранирование кавычек и запятых.
- Как получить расширение и размер файлаРасширение, имя и размер файла в Java: getFileName, lastIndexOf, Files.size и читаемый размер.
- Как получить список файлов в папкеСписок файлов в Java: Files.list, рекурсивный обход через Files.walk, фильтр по расширению и сортировка.
- Как проверить, существует ли файлПроверка файла в Java: Files.exists, isRegularFile, isDirectory, права доступа и почему проверка не заменяет обработку ошибок.
- Как прочитать аргументы командной строкиАргументы командной строки в Java: main с параметром args, числа, флаги и проверка количества.
- Как прочитать ввод пользователяВвод с клавиатуры в Java: IO.readln из Java 25, Scanner, чтение чисел и проверка ввода.
- Как прочитать файл настроек .propertiesФайлы настроек в Java: класс Properties, значения по умолчанию, числа и переменные окружения.
- Как прочитать файл построчноПострочное чтение файла в Java: Files.lines в try-with-resources, BufferedReader и номера строк.
- Как прочитать файл целикомЧтение файла в Java: Files.readString, readAllLines, кодировка и обработка IOException.
- Как прочитать CSV-файлЧтение CSV в Java: строки через Files.lines, split по запятой, заголовок, записи и ограничения ручного разбора.
- Как скопировать или переместить файлКопирование и перемещение файлов в Java: Files.copy, Files.move, перезапись и переименование.
- Как создать папкуСоздание папок в Java: Files.createDirectories для вложенных папок, createDirectory и временные папки.
- Как удалить файл или папкуУдаление в Java: Files.delete, deleteIfExists и удаление папки со всем содержимым.
Ошибки и исключения
- Как автоматически закрывать ресурсыtry-with-resources в Java: автоматическое закрытие файлов и соединений, несколько ресурсов и свой AutoCloseable.
- Как избежать NullPointerExceptionNullPointerException в Java: откуда берётся, как читать сообщение, проверки на null, Optional и значения по умолчанию.
- Как перехватить несколько исключенийОбработка нескольких исключений в Java: несколько catch, мульти-catch через вертикальную черту, порядок блоков и finally.
- Как получить стек вызовов исключения в виде строкиСтек вызовов в Java: printStackTrace в StringWriter, getStackTrace, первая строка стека и логирование.
- Как проверить аргументы методаПроверка аргументов в Java: IllegalArgumentException, Objects.requireNonNull, Objects.checkIndex и проверки в записях.
- Как создать своё исключениеСобственные исключения в Java: наследование от RuntimeException или Exception, сообщение, причина и дополнительные поля.
Многопоточность
- Как выполнить асинхронные задачи и объединить результатыCompletableFuture в Java: supplyAsync, thenApply, thenCombine, allOf и обработка ошибок через exceptionally.
- Как выполнить задачи параллельноПараллельные задачи в Java: ExecutorService, submit и Future, invokeAll и закрытие пула через try-with-resources.
- Как использовать виртуальные потокиВиртуальные потоки в Java 21+: Thread.ofVirtual, Executors.newVirtualThreadPerTaskExecutor и тысячи одновременных задач.
- Как ограничить время выполнения задачиТайм-аут задачи в Java: Future.get с ограничением времени, cancel и CompletableFuture.orTimeout.
- Как сделать паузу в программеЗадержка в Java: Thread.sleep, Duration, InterruptedException и выполнение кода по расписанию.
- Как сделать счётчик потокобезопаснымГонки данных в Java: AtomicInteger, synchronized, ConcurrentHashMap.merge и почему count++ небезопасен.
Разное
- Как безопасно выполнить SQL-запрос с параметрамиПараметры SQL в Java через PreparedStatement: знаки ?, setString и setInt, защита от SQL-инъекций, список значений в IN.
- Как выполнить несколько SQL-запросов в одной транзакцииТранзакции в JDBC: setAutoCommit(false), commit и rollback, откат при ошибке и восстановление режима соединения.
- Как завершить программу с кодом выходаЗавершение программы в Java: System.exit с кодом, коды 0 и 1, выход из main через return, обработчик завершения и почему не стоит вызывать exit везде.
- Как измерить время выполнения кодаЗамер времени в Java: System.nanoTime, Duration, Instant и почему для точных замеров нужен JMH.
- Как отправить HTTP-запросHTTP-запросы в Java через встроенный HttpClient: GET, POST с JSON, тайм-ауты и код ответа.
- Как подключиться к базе данных через JDBCПодключение к базе данных в Java: драйвер JDBC, DriverManager.getConnection, адреса для PostgreSQL, MySQL и SQLite, закрытие соединения.
- Как получить хеш строки (SHA-256, MD5)Хеширование в Java: MessageDigest с SHA-256, вывод в шестнадцатеричном виде через HexFormat и почему пароли так не хранят.
- Как прочитать переменную окружения со значением по умолчаниюПеременные окружения в Java: System.getenv, значение по умолчанию, числа из переменных, обязательные переменные и системные свойства -D.
- Как сгенерировать UUIDUUID в Java: UUID.randomUUID, разбор строки, проверка формата и UUID на основе имени.
- Как узнать, сколько памяти использует программаПамять JVM в Java: Runtime.totalMemory, freeMemory и maxMemory, занятая память до и после операции и почему числа приблизительные.