Сокращение URL java
Map<String, Integer> map = new HashMap<>();
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) {
String[] data = line.split("\\s+");
String url = data[6];
Pattern pattern = Pattern.compile ("[a-z0-9-]+\\.(ru|com|net|de|cn|uk|org|info|nl|tk)");
Matcher matcher = pattern.matcher(url);
Если URL представлен в виде DNS, сокращаем его до второго уровня(например так, с помощью регулярок)
Pattern pattern = Pattern.compile ("[a-z0-9-]+\\.(ru|com|net|de|cn|uk|org|info|nl|tk)");
Matcher matcher = pattern.matcher(url);
Если URL в виде IP, нужно отцепить от него номер хоста, как это прописать?
Пример входных данных:
1360425956.912 0 192.168.50.8 TCP_DENIED/403 3494 CONNECT 128.140.168.69:80 - HIER_NONE/- text/html
1360425962.515 1 192.168.50.8 TCP_DENIED/403 3849 CONNECT e.mail.ru:443 - HIER_NONE/- text/html
Должно получиться в итоге:
128.140.168.69
mail.ru
Ответы (1 шт):
Автор решения: Aziz Umarov
→ Ссылка
Я так понимаю у Вас продолжение темы. Не стал заморачиваться с RegEx полностью. Результат ожидаемый
public static void main(String[] args) throws Exception {
File file = new File("C:\\java\\access.txt");
List<String> addressList = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) {
String[] data = line.split("\\s+");
String URL = data[6];
String regex =
"((([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.){3}([01]?\\d\\d?|2[0-4]\\d|25[0-5]))|([a-z0-9]+\\.(ru|com|net|de|cn|uk|org|info|nl|tk))";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(URL);
matcher
.results()
.forEach(result -> addressList.add(URL.substring(result.start(), result.end())));
}
System.out.println(addressList);
}
}