现在我从apache了解FilenameUtils.getExtension()
。
但是对于我来说,我正在处理来自http(s)url的扩展名,所以如果我有类似的东西
https://your_url/logo.svg?position=5
此方法将返回svg?position=5
有没有最好的方法来处理这种情况?我的意思是不用我自己写这种逻辑。
答案 0 :(得分:1)
您可以使用JAVA中的URL库。在这种情况下,它具有很大的实用性。您应该执行以下操作:
String url = "https://your_url/logo.svg?position=5";
URL fileIneed = new URL(url);
然后,您有很多用于“ fileIneed”变量的吸气剂方法。在您的情况下,“ getPath()”将检索以下内容:
fileIneed.getPath() ---> "/logo.svg"
然后使用您正在使用的Apache库,您将获得“ svg”字符串。
FilenameUtils.getExtension(fileIneed.getPath()) ---> "svg"
JAVA URL库文档>>> https://docs.oracle.com/javase/7/docs/api/java/net/URL.html
答案 1 :(得分:0)
如果要使用brandname®解决方案,请在剥离查询字符串(如果存在)之后考虑使用Apache方法:
String url = "https://your_url/logo.svg?position=5";
url = url.replaceAll("\\?.*$", "");
String ext = FilenameUtils.getExtension(url);
System.out.println(ext);
如果您想要甚至不需要外部库的单线,请考虑使用String#replaceAll
:
String url = "https://your_url/logo.svg?position=5";
String ext = url.replaceAll(".*/[^.]+\\.([^?]+)\\??.*", "$1");
System.out.println(ext);
svg
以下是上面使用的正则表达式模式的说明:
.*/ match everything up to, and including, the LAST path separator
[^.]+ then match any number of non dots, i.e. match the filename
\. match a dot
([^?]+) match AND capture any non ? character, which is the extension
\??.* match an optional ? followed by the rest of the query string, if present