Вы можете использовать Lookahead и Lookbehind. Например:
System.out.println(Arrays.toString("a;b;c;d".split("(?<=;)")));
System.out.println(Arrays.toString("a;b;c;d".split("(?=;)")));
System.out.println(Arrays.toString("a;b;c;d".split("((?<=;)|(?=;))")));
И вы получите:
[a;, b;, c;, d]
[a, ;b, ;c, ;d]
[a, ;, b, ;, c, ;, d]
Последнее, что вы хотите.
((?<=;)|(?=;))
равно выбрать пустой символ до ;
или после ;
.
Надеюсь, что это поможет.
EDIT Замечания Фабиана Стейга о Readability действительны. Считываемость всегда является проблемой для RegEx. Одна вещь, я делаю, чтобы облегчить это - создать переменную, чье имя представляет то, что делает регулярное выражение, и использовать формат строки Java, чтобы помочь этому. Например:
static public final String WITH_DELIMITER = "((?<=%1$s)|(?=%1$s))";
...
public void someMethod() {
...
final String[] aEach = "a;b;c;d".split(String.format(WITH_DELIMITER, ";"));
...
}
...
Это немного помогает. :-D
org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic metadata
может произойти при попытке подключения к брокеру, ожидающему соединения SSL, а в конфигурации клиента не указано;
security.protocol=SSL