шаблон Java для получения названия страницы с расширением - PullRequest
0 голосов
/ 01 марта 2012

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

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Я думаю, что решение с регулярным выражением будет более сложным (и, вероятно, более медленным). Вот как бы я это сделал без них:

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 голос
/ 01 марта 2012

Для этого конкретного 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]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...