Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除文件的扩展名_Java_Regex - Fatal编程技术网

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