使用JSOUP我解析一个HTML页面,我找到了图像路径,但现在我需要获取图像文件名,这是url路径的一部分。
例如,这是img src:
http://cdn-6.justdogbreeds.com/images/3.gif.pagespeed.ce.MVozFWTz66.gif
文件名为3.gif
。
我应该使用什么来从URL路径获取名称?也许正则表达式?
我还有其他网址图片:
http://cdn-1.justdogbreeds.com/images/**10.gif**.pagespeed.ce.gsOmm6tF7W.gif
http://cdn-4.justdogbreeds.com/images/**6.gif**.pagespeed.ce.KbjtJ32Zwx.gif
http://cdn-2.justdogbreeds.com/images/**8.gif**.pagespeed.ce.WAWhS-Qb82.gif
http://cdn-3.justdogbreeds.com/images/**7.gif**.pagespeed.ce.UKTkscU8uT.gif
答案 0 :(得分:2)
您可以将String.lastIndexOf()
与String.substring()
一起使用,而不是正则表达式。
String imgSrc = "http://cdn-1.justdogbreeds.com/images/10.gif.pagespeed.ce.gsOmm6tF7W.gif";
String imageName = imgSrc.substring(imgSrc.lastIndexOf("/") + 1);
imageName = imageName.substring(0, imageName.indexOf(".", 3));
System.out.println(imageName); // prints out 10.gif
这将查找最后出现的正斜杠(/),之后图像名称将开始。字符串的其余部分是完整的图像名称。您只需要10.gif
位,因此第2行的其余部分将查找图像名称后的下一个句点。
答案 1 :(得分:1)
您可以使用正则表达式替换来获得所需的值:
String filename = imgsrc.replaceAll("http://[^/]*justdogbreeds.com/images/([^/]*?\\.gif).*", "$1");
使用正则表达式,我们匹配整个网址,并在images/
之后和最后(包括)第一个.gif
之后捕获文本。 ([^/]*?\\.gif)
尽可能少地匹配 0个或更多字符而不是/
,然后.gif
。如果您有其他扩展程序,则可以在更改组中枚举它们(例如([^/]*?\\.(?:gif|jpe?g|png))
,或使用更通用的模式[^.]+
(除.
以外的1个或多个字符< / em>的):
String filename = imgsrc.replaceAll("http://[^/]*justdogbreeds.com/images/([^/]*?\\.[^.]+).*", "$1");
请参阅IDEONE demo
String imgsrc = "http://cdn-1.justdogbreeds.com/images/10.gif.pagespeed.ce.gsOmm6tF7W.gif";
String filename = imgsrc.replaceAll("http://[^/]*justdogbreeds.com/images/([^/]*?\\.gif).*", "$1");
System.out.println(filename);