2012-02-29 163 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