Java 删除文件的扩展名
给定如下文件名:Java 删除文件的扩展名,java,regex,Java,Regex,给定如下文件名: package.zip image.jpeg video.avi etc 如果存在,我想删除扩展名。我如何用Java制作这个?谢谢 String result = filename.substring(0, filename.lastIndexOf(".")) 在调用substring()类似的命令之前,请检查文件名是否有 if (name.indexOf(".") > 0) name = name.substring(0, name.lastIn
package.zip image.jpeg video.avi etc
如果存在,我想删除扩展名。我如何用Java制作这个?谢谢
String result = filename.substring(0, filename.lastIndexOf("."))
在调用substring()
类似的命令之前,请检查文件名是否有
if (name.indexOf(".") > 0)
name = name.substring(0, name.lastIndexOf("."));
索引检查可避免将“.profile
”之类的隐藏文件转换为“”,而lastIndexOf()
会处理诸如cute.kitty.jpg
之类的名称
String name = filename.lastIndexOf('.') > filename.lastIndexOf(File.separatorChar) ?
filename.substring(0, filename.lastIndexOf('.'))
: filename;
比较检查文件名本身是否包含
,否则返回的字符串将保持不变。使用,
myString = myString.replaceAll("\\.\\w+", "");
或者,如果您也需要路径。这里有一个稍微更健壮的版本:
public static String stripExtension(final String s)
{
return s != null && s.lastIndexOf(".") > 0 ? s.substring(0, s.lastIndexOf(".")) : s;
}
优雅地处理null
,在这种情况下,没有任何东西看起来像扩展名,并且不会干扰以
开头的文件,这也会处理.kitty.jpg
问题
这将处理受控环境中的大多数一般情况,如果后缀实际上不是扩展名,只是分隔的部分,那么您需要添加一些检查,以查看尾随部分是否是您识别的扩展名
Pattern suffix = Pattern.compile("\\.\\p{Alnum}+$");
Matcher m = suffix.matcher(filename);
String clearFilename = m.replaceAll("");
此解决方案的问题在于,根据您的需求,您需要对其进行扩展以支持组合扩展,如filename.tar.gz、filename.tar.bz2
[]的
请记住,如果您需要经常应用此函数,最好使用已编译的正则表达式(Pattern.compile)。如果您使用String.replace和positioning,每次执行都会处理它,并消耗更多的CPU时间。我来这里是想找到这样的答案,但我更喜欢正则表达式的可读性
path。子字符串(0,path.lastIndexOf('.')
比pattern.matcher(path).replaceFirst('.)快几个数量级
,即使使用预编译模式。但是,它也将.kitty.jpg
,而不删除.jpg
。这可能是需要的,也可能不是。您可以执行name.lastIndexOf(“.”)0
而不是name.indexOf(“.”)0
,它将从.kitty.jpg
中删除.jpg
,同时保留为.kitty