在Java中,如何从字符串中删除文件扩展名?

196

在Java中,最有效的方式是什么来截取后缀,例如:

title part1.txt
title part2.html
=>
title part1
title part2

2
高效的代码是你所期望的,我希望没有与 CPU 相关的意思。 - mkoryak
3
他并不是在问如何去做,他在问什么是最有效率的方式。我也是来这里寻找同样的答案的。 - Edward Falk
23个回答

0
private String trimFileName(String fileName)
    {
        String[] ext;
        ext = fileName.split("\\.");
        
        return fileName.replace(ext[ext.length - 1], "");

    }

这段代码将文件名按照 " . " 进行分割。例如,如果文件名为 file-name.hello.txt,它将被拆分为字符串数组 { "file-name", "hello", "txt" }。因此,这个字符串数组的最后一个元素将是该特定文件的文件扩展名,我们可以简单地通过使用 arrayname.length - 1 找到任何数组的最后一个元素,所以在了解了最后一个元素之后,我们可以仅仅用空字符串替换该文件名中的文件扩展名。最后,这将返回 file-name.hello.,如果您想要移除最后一个句号,那么您可以将只有句号的字符串添加到返回行中的字符串数组的最后一个元素中。这应该看起来像:

return fileName.replace("." +  ext[ext.length - 1], "");

一些解释这段代码如何帮助的话会非常有用。 - Vega
这将会对输入如 file-doc-new.marketing.doc 的数据产生意外的结果,因为它会移除掉 doc 这个单词的两个实例。 - Mike K

0
我会这样做:
String title_part = "title part1.txt";
int i;
for(i=title_part.length()-1 ; i>=0 && title_part.charAt(i)!='.' ; i--);
title_part = title_part.substring(0,i);

从开头到'.'处开始,然后调用子字符串函数。
编辑: 可能不是高尔夫,但很有效 :)

7
lastIndexOf 的基本功能已经实现了,何必重复发明轮子呢? - Michael Myers
只是为了好玩和稍微描述一下而已。(当时我写这个的时候忘记了lastIndexOf) - fmsf

-1
public static String removeExtension(String file) {
    if(file != null && file.length() > 0) {
        while(file.contains(".")) {
            file = file.substring(0, file.lastIndexOf('.'));
        }
    }
    return file;
}

这将把"a.jpg.jpg"转换为"a",而不是(正确的)"a.jpg"。 file.length()> 0检查有什么作用? - Klaus Gütter
主要问题是“如何删除扩展名?”,所以是的,它将“a.txt.zip”转换为“a”,将“.htaccess”转换为空。此函数适用于字符串,因此文件名可以不为空但长度仍然可以为0,在解析符号之前快速检查是否值得。谢谢。 - Alexey

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