删除文件的扩展名

19

假设有一个文件名:

 package.zip    image.jpeg   video.avi etc

我想在Java中删除扩展名(如果存在)。请问应该如何实现?谢谢!

7个回答

42

类似于什么

if (name.indexOf(".") > 0)
    name = name.substring(0, name.lastIndexOf("."));

索引检查避免将隐藏文件(如“.profile”)转换为“”,而 lastIndexOf() 则处理像 cute.kitty.jpg 这样的名称。


5
然而,它也会保留.kitty.jpg,而不会移除 .jpg。这可能是需要的,也可能不是需要的。 - Matthew Flaschen
4
你可以使用name.lastIndexOf(".") > 0代替name.indexOf(".") > 0,这将从.kitty.jpg中移除.jpg并保留它作为.kitty - Sub 6 Resources

21

8
这里是稍微更加强大的版本:
public static String stripExtension(final String s)
{
    return s != null && s.lastIndexOf(".") > 0 ? s.substring(0, s.lastIndexOf(".")) : s;
}

优雅地处理null,没有任何类似扩展名的情况,不会干扰以.开头的文件,这也解决了.kitty.jpg问题。
在受控环境中,这将处理大多数一般情况。如果后缀实际上不是扩展名,只是一个用.分隔的字符串,则需要添加一些检查来查看尾部部分是否真的是您认可的扩展名。

4
myString = myString.replaceAll("\\.\\w+", "");

3
String result = filename.substring(0, filename.lastIndexOf("."))

在调用 substring() 函数之前,请检查文件名是否含有 .


2
String name = filename.lastIndexOf('.') > filename.lastIndexOf(File.separatorChar) ?
     filename.substring(0, filename.lastIndexOf('.'))
   : filename;

比较检查文件名本身是否包含一个 . ,否则将返回未更改的字符串。

0
Pattern suffix = Pattern.compile("\\.\\p{Alnum}+$");
Matcher m = suffix.matcher(filename);
String clearFilename = m.replaceAll("");

这个解决方案的问题在于,根据您的要求,您需要扩展它以支持组合扩展名,例如filename.tar.gz,filename.tar.bz2。
祝好!
过去的事。

1
请记住,如果您需要经常使用此函数,则最好使用编译后的正则表达式(Pattern.compile)。如果您使用String.replace和定位,则每次执行都会进行处理并消耗更多的CPU时间。 - Andre Pastore
2
来到这里是为了找到像这样的答案,但尽管我更喜欢使用正则表达式以提高可读性,但 path.substring(0, path.lastIndexOf('.')) 的速度比 pattern.matcher(path).replaceFirst("")快几个数量级,即使使用预编译模式也是如此。 - MithrilTuxedo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接