На первый взгляд такой код выглядит правильно:
String[] parts =
"api.example.com".split(".");
Но split() принимает не обычную строку-разделитель, а регулярное выражение.
В regex точка означает любой символ. Поэтому выражение "." совпадает практически со всей строкой, а пустые элементы в конце результата split() удаляет.
В результате можно неожиданно получить пустой массив:
System.out.println(
Arrays.toString("a.b".split("."))
);
// []
Чтобы искать именно точку, её нужно экранировать:
String[] parts =
"api.example.com".split("\\.");
System.out.println(
Arrays.toString(parts)
);
// [api, example, com]
Два обратных слеша нужны из-за двойной обработки: сначала Java превращает \\ в один слеш, а затем regex получает выражение \.
Если разделитель приходит из переменной, безопаснее не экранировать его вручную:
String separator = ".";
String regex =
Pattern.quote(separator);
String[] parts = text.split(regex);
Pattern.quote() превращает строку в литеральное регулярное выражение. Это особенно полезно для разделителей вроде точки, вертикальной черты, плюса или скобок.
👉 Java Ready | #совет
