對於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