From 5d23f56825bcd20ba32dc401d05bc2305c4646c5 Mon Sep 17 00:00:00 2001 From: Struchkov Mark Date: Fri, 28 Jan 2022 23:55:09 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4?= =?UTF-8?q?=D1=8B=20=D0=B2=20Assert=20=D0=B8=20Strings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dev/struchkov/haiti/utils/Assert.java | 16 +++++-- .../dev/struchkov/haiti/utils/Strings.java | 47 +++++++++++++++++++ 2 files changed, 58 insertions(+), 5 deletions(-) diff --git a/haiti-utils/src/main/java/dev/struchkov/haiti/utils/Assert.java b/haiti-utils/src/main/java/dev/struchkov/haiti/utils/Assert.java index f382404..454654b 100644 --- a/haiti-utils/src/main/java/dev/struchkov/haiti/utils/Assert.java +++ b/haiti-utils/src/main/java/dev/struchkov/haiti/utils/Assert.java @@ -1,7 +1,5 @@ package dev.struchkov.haiti.utils; -import java.util.Arrays; -import java.util.Objects; import java.util.function.Supplier; import static dev.struchkov.haiti.utils.Exceptions.utilityClass; @@ -13,7 +11,7 @@ import static dev.struchkov.haiti.utils.Exceptions.utilityClass; */ public final class Assert { - public Assert() { + private Assert() { utilityClass(); } @@ -29,9 +27,17 @@ public final class Assert { } } + /** + * Проверяет множество объектов на null. Если хотябы один объект null, то будет выброшено исключение + * + * @param exception исключение, которое необходимо выбросить + * @param objects проверяемое множество объектов + */ public static void isAnyNotNull(Supplier exception, Object... objects) { - if (Arrays.stream(objects).allMatch(Objects::isNull)) { - throw exception.get(); + for (Object object : objects) { + if (object == null) { + throw exception.get(); + } } } diff --git a/haiti-utils/src/main/java/dev/struchkov/haiti/utils/Strings.java b/haiti-utils/src/main/java/dev/struchkov/haiti/utils/Strings.java index f7620c9..bc7efb0 100644 --- a/haiti-utils/src/main/java/dev/struchkov/haiti/utils/Strings.java +++ b/haiti-utils/src/main/java/dev/struchkov/haiti/utils/Strings.java @@ -1,5 +1,9 @@ package dev.struchkov.haiti.utils; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + import static dev.struchkov.haiti.utils.Exceptions.utilityClass; /** @@ -9,12 +13,55 @@ import static dev.struchkov.haiti.utils.Exceptions.utilityClass; */ public final class Strings { + private static final Set MD_FORBIDDEN_SYMBOLS = Stream.of( + '\\', '+', '`', '[', ']', '\"', '~', '*', '#', '=', '_', '>', '<' + ).collect(Collectors.toSet()); + private Strings() { utilityClass(); } public static final String EMPTY = ""; + public static final String NEW_LINE = System.getProperty("line.separator"); + public static final String TWO_NEW_LINE = NEW_LINE + NEW_LINE; public static final String ERR_UTILITY_CLASS = "Нельзя создать объект утилитарного класса"; public static final String ERR_OPERATION_NOT_SUPPORTED = "Операция не поддерживается"; + /** + *

Позволяет обрезать строку до нужного количества символов.

+ *

Если обрезание произошло, то добавляет в конец строки "..."

+ *

Если вместо строки передали null, то вернет null

+ * + * @param string Строка, которую необходимо обрезать + * @param length Нужное количество символов + * @return Обрезанная до length количества символов строка + */ + public static String cutoff(String string, int length) { + if (string != null) { + return string.length() > length ? string.substring(0, length) + "..." : string; + } + return null; + } + + /** + * Экранирует специальные символы Markdown. + * + * @param str Строка, в которой необходимо экранировать символы. + * @return Строка с экранированными символами + */ + public static String escapeMarkdown(String str) { + if (str != null) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < str.length(); i++) { + char c = str.charAt(i); + if (MD_FORBIDDEN_SYMBOLS.contains(c)) { + sb.append('\\'); + } + sb.append(c); + } + return sb.toString(); + } + return null; + } + }