Java获取无子字符串的文件扩展名
如何在Java中获得文件扩展名而不使用愚蠢的Java获取无子字符串的文件扩展名,java,file-extension,Java,File Extension,如何在Java中获得文件扩展名而不使用愚蠢的lastIndexOf('.')等?这可能是最简单的方法(还要注意,根据上下文,它不一定正确,例如“.tar.gz”) 您还可以根据字符拆分字符串,并获取最后一段,但这似乎同样困难 您试图避免使用substring和lastIndexOf,有什么特别的原因吗?apache Commons库有 您可以查看源代码,然后开始 至少检查一下它们的实现情况。这很简单,它们正确地处理dir.ext/file,要处理类似file.tar.gz的内容,如果要提取.ta
lastIndexOf('.')
等?这可能是最简单的方法(还要注意,根据上下文,它不一定正确,例如“.tar.gz”)
您还可以根据
字符拆分字符串,并获取最后一段,但这似乎同样困难
您试图避免使用substring
和lastIndexOf
,有什么特别的原因吗?apache Commons库有
您可以查看源代码,然后开始
至少检查一下它们的实现情况。这很简单,它们正确地处理dir.ext/file,要处理类似file.tar.gz的内容,如果要提取.tar.gz而不仅仅是.gz,则需要一个特例。不想包含外部库吗?使用正则表达式:
String extension = filename.replaceAll("^.*\\.([^.]+)$", "$1");
与
Files.getFileExtension(“some.txt”)
我解释说,他想要的是文件扩展名本身,而不是没有扩展名的名称。仍然有一个方法(getExtension
),但请阅读它的作用:“返回文件名最后一个点后的文本部分。”这正是他已经在做的事情;仅仅为相同的功能添加一个完整的库/依赖项是没有意义的(除非他已经在使用Apache Commons)。@JonathanNewmuis,也就是说,关于我的方法混搭是正确的。我相信getExtension
的实现比简单地包装lastIndexOf
要彻底一些,原因是您自己的答案地址,例如dir.ext/file。不幸的是,这不是一个标准库,所以对于这个问题,我使用了lastIndexOf可能的不可能的副本。任何解决方案都可以使用lastIndexOfA,了解一下为什么lastindexof
不是您想要的或者对您不起作用-当然我知道这种方法也有问题,但是稍微了解一下您为什么要寻找另一种方法可能会有所帮助。我想其他库也会遵循同样的方法。事实上,FileNameUtils使用相同的机制。但我想知道你为什么不想那样。你认为它在某些情况下会失败吗。如果是这样的话,你能用这个例子说明一个失败的例子吗?恐怕里面没有这样的方法,我猜你是指google的@A4L谢谢你指出这一点,我被这个类的java.lang包搞糊涂了☺