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; + } + }