Java:将文件名拆分为基值和扩展名
有没有比以下更好的方法来获取文件基名和扩展名
File f = ...
String name = f.getName();
int dot = name.lastIndexOf('.');
String base = (dot == -1) ? name : name.substring(0, dot);
String extension = (dot == -1) ? "" : name.substring(dot+1);
有没有比以下更好的方法来获取文件基名和扩展名
File f = ...
String name = f.getName();
int dot = name.lastIndexOf('.');
String base = (dot == -1) ? name : name.substring(0, dot);
String extension = (dot == -1) ? "" : name.substring(dot+1);
我知道其他人已经提到过,但这里有一个变体,只产生两个令牌(基数和扩展名):String.split
String[] tokens = fileName.split("\\.(?=[^\\.]+$)");
例如:
"test.cool.awesome.txt".split("\\.(?=[^\\.]+$)");
收益 率:
["test.cool.awesome", "txt"]
正则表达式告诉 Java 在后跟任意数量的非句点后拆分,后跟输入的结尾。只有一个句点与此定义匹配(即最后一个句点)。
技术正则说来,这种技术称为零宽度正前瞻。
顺便说一句,如果要拆分路径并获取完整的文件名,包括但不限于点扩展名,请使用带有正斜杠的路径,
String[] tokens = dir.split(".+?/(?=[^/]+$)");
例如:
String dir = "/foo/bar/bam/boozled";
String[] tokens = dir.split(".+?/(?=[^/]+$)");
// [ "/foo/bar/bam/" "boozled" ]
老问题,但我通常使用这个解决方案:
import org.apache.commons.io.FilenameUtils;
String fileName = "/abc/defg/file.txt";
String basename = FilenameUtils.getBaseName(fileName);
String extension = FilenameUtils.getExtension(fileName);
System.out.println(basename); // file
System.out.println(extension); // txt (NOT ".txt" !)