Добавил новые методы в Assert и Strings

This commit is contained in:
Struchkov Mark 2022-01-28 23:55:09 +03:00
parent 143109cca8
commit 5d23f56825
2 changed files with 58 additions and 5 deletions

View File

@ -1,7 +1,5 @@
package dev.struchkov.haiti.utils; package dev.struchkov.haiti.utils;
import java.util.Arrays;
import java.util.Objects;
import java.util.function.Supplier; import java.util.function.Supplier;
import static dev.struchkov.haiti.utils.Exceptions.utilityClass; 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 final class Assert {
public Assert() { private Assert() {
utilityClass(); utilityClass();
} }
@ -29,11 +27,19 @@ public final class Assert {
} }
} }
/**
* Проверяет множество объектов на null. Если хотябы один объект null, то будет выброшено исключение
*
* @param exception исключение, которое необходимо выбросить
* @param objects проверяемое множество объектов
*/
public static void isAnyNotNull(Supplier<? extends RuntimeException> exception, Object... objects) { public static void isAnyNotNull(Supplier<? extends RuntimeException> exception, Object... objects) {
if (Arrays.stream(objects).allMatch(Objects::isNull)) { for (Object object : objects) {
if (object == null) {
throw exception.get(); throw exception.get();
} }
} }
}
/** /**
* Проверка на null значение с возвращением исключения, если объект null. * Проверка на null значение с возвращением исключения, если объект null.

View File

@ -1,5 +1,9 @@
package dev.struchkov.haiti.utils; 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; import static dev.struchkov.haiti.utils.Exceptions.utilityClass;
/** /**
@ -9,12 +13,55 @@ import static dev.struchkov.haiti.utils.Exceptions.utilityClass;
*/ */
public final class Strings { public final class Strings {
private static final Set<Character> MD_FORBIDDEN_SYMBOLS = Stream.of(
'\\', '+', '`', '[', ']', '\"', '~', '*', '#', '=', '_', '>', '<'
).collect(Collectors.toSet());
private Strings() { private Strings() {
utilityClass(); utilityClass();
} }
public static final String EMPTY = ""; 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_UTILITY_CLASS = "Нельзя создать объект утилитарного класса";
public static final String ERR_OPERATION_NOT_SUPPORTED = "Операция не поддерживается"; public static final String ERR_OPERATION_NOT_SUPPORTED = "Операция не поддерживается";
/**
* <p>Позволяет обрезать строку до нужного количества символов.</p>
* <p>Если обрезание произошло, то добавляет в конец строки "..."</p>
* <p>Если вместо строки передали null, то вернет null</p>
*
* @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;
}
} }