为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Java中从字符串修剪文件扩展名?

如何在Java中从字符串修剪文件扩展名?

互换的青春 2019-10-28 16:46:11
修剪Java后缀的最有效方法是什么,如下所示:title part1.txttitle part2.html=>title part1title part2
查看完整描述

3 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

这是我们不应该自己做的代码。将库用于平凡的东西,为硬的东西而动脑子。


在这种情况下,我建议使用FilenameUtils.removeExtension()从Apache的百科全书IO


查看完整回答
反对 回复 2019-10-28
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

由于在单行中使用String.substringand String.lastIndex很好,因此在能够处理某些文件路径方面存在一些问题。


以以下路径为例:


a.b/c

使用单线将导致:


a

不对


结果应该是c,但是由于文件没有扩展名,但是路径中有一个.名称为的目录,因此,单线方法被欺骗为路径的一部分提供文件名,这是不正确的。


需要检查


受skaffman答案的启发,我看了Apache Commons IO的FilenameUtils.removeExtension方法。


为了重新创建其行为,我编写了新方法应满足的一些测试,这些测试如下:


路径文件名

-------------- --------

a / b / cc

a / b / c.jpg c

a / b / c.jpg.jpg c.jpg


绝对/ cc

ab / c.jpg c

ab / c.jpg.jpg c.jpg


抄送

c.jpg c

c.jpg.jpg c.jpg

(这就是我检查过的全部内容-可能还有其他应被我忽略的检查。)


实施


以下是我对该removeExtension方法的实现:


public static String removeExtension(String s) {


    String separator = System.getProperty("file.separator");

    String filename;


    // Remove the path upto the filename.

    int lastSeparatorIndex = s.lastIndexOf(separator);

    if (lastSeparatorIndex == -1) {

        filename = s;

    } else {

        filename = s.substring(lastSeparatorIndex + 1);

    }


    // Remove the extension.

    int extensionIndex = filename.lastIndexOf(".");

    if (extensionIndex == -1)

        return filename;


    return filename.substring(0, extensionIndex);

}

removeExtension通过上面的测试运行此方法会产生上面列出的结果。


使用以下代码测试了该方法。由于它是在Windows上运行的,因此路径分隔符是\,\当用作String文字的一部分时,必须使用a对其进行转义。


System.out.println(removeExtension("a\\b\\c"));

System.out.println(removeExtension("a\\b\\c.jpg"));

System.out.println(removeExtension("a\\b\\c.jpg.jpg"));


System.out.println(removeExtension("a.b\\c"));

System.out.println(removeExtension("a.b\\c.jpg"));

System.out.println(removeExtension("a.b\\c.jpg.jpg"));


System.out.println(removeExtension("c"));

System.out.println(removeExtension("c.jpg"));

System.out.println(removeExtension("c.jpg.jpg"));

结果是:


c

c

c.jpg

c

c

c.jpg

c

c

c.jpg

结果是该方法应满足的测试中概述的期望结果。


查看完整回答
反对 回复 2019-10-28
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

顺便说一句,就我而言,当我想要快速解决方案以删除特定扩展名时,这大致就是我所做的:


  if (filename.endsWith(ext))

    return filename.substring(0,filename.length() - ext.length());

  else

    return filename;


查看完整回答
反对 回复 2019-10-28
  • 3 回答
  • 0 关注
  • 375 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信