Ответ 1
Вам нужно избегать точки, если вы хотите разбить на буквальную точку:
String extensionRemoved = filename.split("\\.")[0];
В противном случае вы разбиваете на regex .
, что означает "любой символ".
Обратите внимание на двойную обратную косую черту, необходимую для создания одной обратной косой черты в регулярном выражении.
Вы получаете ArrayIndexOutOfBoundsException
, потому что ваша строка ввода - это просто точка, т.е. "."
, которая является регистром, который создает пустой массив при разбиении на точку; split(regex)
удаляет все завершающие пробелы из результата, но так как разделение точки на точке оставляет только две пробелы, после удаления заготовок пробелы вы остаетесь с пустым массив.
Чтобы избежать получения ArrayIndexOutOfBoundsException
для этого случая края, используйте перегруженную версию split(regex, limit)
, у которой есть второй параметр, который является пределом размера для результирующий массив. Когда limit
отрицательно, поведение удаления завершающих пробелов из результирующего массива отключено:
".".split("\\.", -1) // returns an array of two blanks, ie ["", ""]
т.е. когда filename
является просто точкой "."
, вызов filename.split("\\.", -1)[0]
возвращает пустой, но вызов filename.split("\\.")[0]
будет вызывать ArrayIndexOutOfBoundsException
.