Bạn cần phải thoát khỏi dấu chấm nếu bạn muốn chia trên đen dot:
String extensionRemoved = filename.split("\\.")[0];
Nếu không, bạn đang tách trên regex .
, có nghĩa là "bất kỳ nhân vật nào".
Lưu ý dấu gạch chéo ngược kép cần thiết để tạo một dấu gạch chéo ngược duy nhất trong regex.
Bạn đang nhận được một ArrayIndexOutOfBoundsException
vì chuỗi đầu vào của bạn chỉ là một dấu chấm, tức là "."
, đó là một trường hợp cạnh đó tạo ra một mảng trống rỗng khi chia trên chấm; split(regex)
loại bỏ tất cả khoảng trống cuối cùng khỏi kết quả, nhưng vì việc tách một dấu chấm trên một chấm chỉ còn hai khoảng trắng, sau khi các khoảng trống ở cuối được xóa, bạn còn lại với một mảng trống.
Để tránh bị ArrayIndexOutOfBoundsException
cho trường hợp cạnh này, hãy sử dụng phiên bản quá tải split(regex, limit)
, có tham số thứ hai là giới hạn kích thước cho mảng kết quả. Khi limit
là tiêu cực, hành vi của loại bỏ khoảng trống dấu từ mảng kết quả bị vô hiệu hóa:
".".split("\\.", -1) // returns an array of two blanks, ie ["", ""]
tức là, khi filename
chỉ là một dấu chấm "."
, gọi filename.split("\\.", -1)[0]
sẽ trả về một trống, nhưng gọi filename.split("\\.")[0]
sẽ ném một ArrayIndexOutOfBoundsException
.
Không chia sử dụng một chuỗi regex? Trong trường hợp đó "." có nghĩa là bất kỳ nhân vật nào. – Snps
... và đó là dấu gạch chéo ngược DOUBLE để phân tách. – Ben