2012-02-29 38 views

回答

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] 
} 
+0

該網址可以是任何東西。但是我們必須只找到頁面名稱。在這種情況下,stackoverflow – user679526 2012-02-29 20:50:47

+0

然後它更好地使用我的基於模式的解決方案,這將適用於任何URL。 – anubhava 2012-02-29 21:02:33

+1

**最好的**解決方案是使用'URL'對象,它適用於正則表達式沒有考慮到的所有URL。 – 2012-02-29 21:39:03

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

相關問題