Tôi biết những người khác đã đề cập đến String.split
, nhưng đây là một biến thể chỉ mang lại hai mã thông báo (cơ sở và phần mở rộng):
String[] tokens = fileName.split("\\.(?=[^\\.]+$)");
Ví dụ:
"test.cool.awesome.txt".split("\\.(?=[^\\.]+$)");
Sản lượng:
["test.cool.awesome", "txt"]
Biểu thức chính quy yêu cầu Java phân chia theo bất kỳ khoảng thời gian nào theo sau bởi bất kỳ số lượng không phải dấu chấm nào, theo sau là phần cuối của đầu vào. Chỉ có một thời kỳ phù hợp với định nghĩa này (cụ thể là thời kỳ cuối cùng ).
Về mặt kỹ thuật Nói một cách độc đáo, kỹ thuật này được gọi là cái nhìn tích cực không độ rộng .
BTW, nếu bạn muốn tách đường dẫn và lấy tên tệp đầy đủ bao gồm nhưng không giới hạn phần mở rộng dấu chấm, sử dụng đường dẫn có dấu gạch chéo về phía trước,
String[] tokens = dir.split(".+?/(?=[^/]+$)");
Ví dụ:
String dir = "/foo/bar/bam/boozled";
String[] tokens = dir.split(".+?/(?=[^/]+$)");
FilenameUtils
. Nó có các phương phápgetBaseName(..)
vàgetExtension(..)
.