对于URL http://questions/ask/stackoverflow.xhtml,需求是获得stackoverflow。 用于获取此页面名称的模式是什么? 可以使用子字符串,但我读到模式Matcher的性能会更好。java模式获取带扩展名的页面名称
0
A
回答
1
对于特定的网址,你可以使用:
String url = "http://questions/ask/stackoverflow.xhtml";
String pname = url.split("/")[4].split("\\.")[0];
对于更有效(在没有业绩的正则表达式的计算)基于模式的解决方案考虑这个问题:
String url = "http://questions/ask/stackoverflow.xhtml";
Pattern pt = Pattern.compile("/(?![^/]*/)([^.]*)\\.");
Matcher matcher = pt.matcher(url);
if(matcher.find()) {
System.out.println("Matched: [" + matcher.group(1) + ']');
// prints Matched: [stackoverflow]
}
2
我猜想,一个正则表达式解决方案会更复杂(可能更慢)。这是我会怎么做没有他们:
public static String getFilename(String s) {
int lastSlash = s.lastIndexOf("/");
if (lastSlash < 0) return null;
int nextDot = s.indexOf(".", lastSlash);
return s.substring(lastSlash+1, (nextDot<0) ? s.length() : nextDot);
}
String url = "http://questions/ask/stackoverflow.xhtml";
getFilename(url); // => "stackoverflow"
当然,如果该URL没有文件名,那么你会得到主机名代替。您可能最好解析URL,解压文件部分,并删除路径和扩展名。这样的事情:
public static String getFilename2(String s) {
URL url = null;
try {
url = new URL(s);
} catch (MalformedURLException mue) { return null; }
String filePart = url.getFile();
if (filePart.equals("")) return "";
File f = new File(filePart);
String filename = f.getName();
int lastDot = filename.lastIndexOf(".");
return (lastDot<0) ? filename : filename.substring(0, lastDot);
}
+1
使用'URL'对象是最正确的方法来做到这一点,它将正确处理任何**正确形成的URL,某些特定的正则表达式将在某处输入中断。 – 2012-02-29 21:38:18
相关问题
- 1. 按扩展名称查找页面
- 2. 获取父页面名称
- 3. 从扩展类中获取类名称
- 4. 用扩展名获取数据.java
- 5. 获取文件名不带扩展名的Python
- 6. 获取不带扩展名的文件名,textmade包编辑器
- 7. ServletRequest获取实际页面的名称
- 8. 使用CMake获取目标文件名,不带扩展名
- 9. 从URL和带文件扩展名获取文件名
- 10. 获取文件上传名称和扩展名在JS
- 11. 在java中获取友好URL的文件名和扩展名
- 12. 如何获得页面文件名称,减去Jekyll中的扩展名(即基本名称)?
- 13. 带扩展名的Swift3 CoreData
- 14. jsp过滤器,获取页面名称
- 15. modx php获取当前页面名称
- 16. 使用.htaccess获取页面名称
- 17. C#获取页面类型名称?
- 18. Java泛型名称冲突扩展
- 19. 用web.config隐藏页面的扩展名
- 20. 扩展名的页面请求
- 21. 没有扩展名的jQuery .load页面
- 22. 如何制作带有.jsf扩展名的JSF 2.0页面?
- 23. 当我有表名称时获取模式名称 - Oracle
- 24. WordPress页面没有.php扩展名
- 25. 加载php页面.php扩展名
- 26. 获取带有扩展名的目录中的文件列表
- 27. 查找名称和扩展
- 28. 如何在地址栏中隐藏我的页面名称和扩展名?
- 29. 名称后面带有数字的名称(正则表达式)
- 30. 如何获取正在扩展的类的名称
该网址可以是任何东西。但是我们必须只找到页面名称。在这种情况下,stackoverflow – user679526 2012-02-29 20:50:47
然后它更好地使用我的基于模式的解决方案,这将适用于任何URL。 – anubhava 2012-02-29 21:02:33
**最好的**解决方案是使用'URL'对象,它适用于正则表达式没有考虑到的所有URL。 – 2012-02-29 21:39:03