假设有一个文件名:
package.zip image.jpeg video.avi etc
我想在Java中删除扩展名(如果存在)。请问应该如何实现?谢谢!
类似于什么
if (name.indexOf(".") > 0)
name = name.substring(0, name.lastIndexOf("."));
索引检查避免将隐藏文件(如“.profile
”)转换为“”,而 lastIndexOf()
则处理像 cute.kitty.jpg
这样的名称。
如果需要路径,可以使用 Apache Commons IO 中的 FilenameUtils.getBaseName(String filename)
或者 removeExtension(String filename)
方法。
public static String stripExtension(final String s)
{
return s != null && s.lastIndexOf(".") > 0 ? s.substring(0, s.lastIndexOf(".")) : s;
}
null
,没有任何类似扩展名的情况,不会干扰以.
开头的文件,这也解决了.kitty.jpg
问题。.
分隔的字符串,则需要添加一些检查来查看尾部部分是否真的是您认可的扩展名。myString = myString.replaceAll("\\.\\w+", "");
String result = filename.substring(0, filename.lastIndexOf("."))
在调用 substring()
函数之前,请检查文件名是否含有 .
。
String name = filename.lastIndexOf('.') > filename.lastIndexOf(File.separatorChar) ?
filename.substring(0, filename.lastIndexOf('.'))
: filename;
. ,否则将返回未更改的字符串。
Pattern suffix = Pattern.compile("\\.\\p{Alnum}+$");
Matcher m = suffix.matcher(filename);
String clearFilename = m.replaceAll("");
path.substring(0, path.lastIndexOf('.'))
的速度比 pattern.matcher(path).replaceFirst("")
快几个数量级,即使使用预编译模式也是如此。 - MithrilTuxedo
.kitty.jpg
,而不会移除.jpg
。这可能是需要的,也可能不是需要的。 - Matthew Flaschenname.lastIndexOf(".") > 0
代替name.indexOf(".") > 0
,这将从.kitty.jpg
中移除.jpg
并保留它作为.kitty
。 - Sub 6 Resources