2012-02-29 2 views
0

Для URL http://questions/ask/stackoverflow.xhtml требуется получение stackoverflow. Каков шаблон, используемый для получения этого имени страницы? Подстроку можно использовать, но я читал, что производительность для шаблона Matcher будет лучше.java pattern для получения имени домена с расширением

ответ

1

Для этого конкретного URL вы можете использовать:

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

+0

Тогда лучше использовать мое решение на основе шаблонов, которое будет работать для любого URL-адреса. – anubhava

+1

** Лучшим ** решением является использование объекта 'URL', который будет работать для всех URL-адресов, которые не принимает во внимание регулярное выражение. –

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-адрес, некоторое ad-hoc-regex будет где-то сломаться. –

Смежные вопросы