-
慕容708150
这是我们不应该自己做的代码。将库用于平凡的东西,为硬的东西而动脑子。在这种情况下,我建议使用FilenameUtils.removeExtension()从Apache的百科全书IO
-
湖上湖
由于在单行中使用String.substringand String.lastIndex很好,因此在能够处理某些文件路径方面存在一些问题。以以下路径为例:a.b/c使用单线将导致:a不对结果应该是c,但是由于文件没有扩展名,但是路径中有一个.名称为的目录,因此,单线方法被欺骗为路径的一部分提供文件名,这是不正确的。需要检查受skaffman答案的启发,我看了Apache Commons IO的FilenameUtils.removeExtension方法。为了重新创建其行为,我编写了新方法应满足的一些测试,这些测试如下:路径文件名-------------- --------a / b / cca / b / c.jpg ca / b / c.jpg.jpg c.jpg绝对/ ccab / c.jpg cab / c.jpg.jpg c.jpg抄送c.jpg cc.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"));结果是:ccc.jpgccc.jpgccc.jpg结果是该方法应满足的测试中概述的期望结果。
-
FFIVE
顺便说一句,就我而言,当我想要快速解决方案以删除特定扩展名时,这大致就是我所做的: if (filename.endsWith(ext)) return filename.substring(0,filename.length() - ext.length()); else return filename;