kalinikov

09. User Logs

Jan 25th, 2020
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.07 KB | None | 0 0
  1. import java.util.LinkedHashMap;
  2. import java.util.Map;
  3. import java.util.Scanner;
  4. import java.util.TreeMap;
  5. import java.util.regex.Matcher;
  6. import java.util.regex.Pattern;
  7. import java.util.stream.Collectors;
  8.  
  9. public class UserLogs {
  10. public static void main(String[] args) {
  11. Scanner scanner = new Scanner(System.in);
  12.  
  13. Map<String, LinkedHashMap<String, Integer>> usersWithIPsAndMessages = new TreeMap<>();
  14. String regex = "^IP=(?<IP>[0-9.A-Z:]+) message='(?<message>.*)' user=(?<user>.+){3,50}$";
  15.  
  16. String input = scanner.nextLine();
  17.  
  18. while (!"end".equals(input)) {
  19. Pattern pattern = Pattern.compile(regex);
  20. Matcher matcher = pattern.matcher(input);
  21.  
  22. if (matcher.find()) {
  23. String IP = matcher.group("IP");
  24. int index = input.lastIndexOf("=");
  25. String user = input.substring(index + 1);
  26.  
  27. if (!usersWithIPsAndMessages.containsKey(user)) {
  28. usersWithIPsAndMessages.put(user, new LinkedHashMap<>());
  29. usersWithIPsAndMessages.get(user).put(IP, 1);
  30. } else {
  31. if (!usersWithIPsAndMessages.get(user).containsKey(IP)) {
  32. usersWithIPsAndMessages.get(user).put(IP, 1);
  33. } else {
  34. usersWithIPsAndMessages.get(user).put(IP, usersWithIPsAndMessages.get(user).get(IP) + 1);
  35. }
  36. }
  37. }
  38.  
  39. input = scanner.nextLine();
  40. }
  41.  
  42. if (!usersWithIPsAndMessages.isEmpty()) {
  43. usersWithIPsAndMessages.forEach((key, value) -> {
  44. System.out.printf("%s:%n", key);
  45. String result = convertWithStream(value) + ".";
  46. System.out.println(result);
  47. });
  48. }
  49.  
  50. }
  51.  
  52. public static String convertWithStream(Map<String, Integer> map) {
  53. return map.keySet().stream()
  54. .map(key -> key + " => " + map.get(key))
  55. .collect(Collectors.joining(", "));
  56. }
  57. }
Add Comment
Please, Sign In to add comment