Advertisement
SPDG57

Race - Regex [Map sorting and collection | Using patterns]

Nov 24th, 2019
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.76 KB | None | 0 0
  1. package com.company;
  2.  
  3. import javafx.util.Pair;
  4.  
  5. import javax.xml.crypto.dsig.keyinfo.KeyValue;
  6. import java.security.KeyStore;
  7. import java.text.Collator;
  8. import java.text.DecimalFormat;
  9. import java.util.*;
  10. import java.util.function.Predicate;
  11. import java.util.regex.Matcher;
  12. import java.util.regex.Pattern;
  13. import java.util.stream.Collector;
  14. import java.util.stream.Collectors;
  15. import java.util.stream.Stream;
  16.  
  17.  
  18. public class Main {
  19.     public static void main(String[] args) {
  20.         Scanner scanner = new Scanner(System.in);
  21.  
  22.         Map<String, Integer> racers = new LinkedHashMap<>();
  23.         List<String> names = Arrays.stream(scanner.nextLine().split(", ")).collect(Collectors.toList());
  24.  
  25.         String regexLetters = "(?<name>[A-Za-z]+)";
  26.         String regexDistance = "(?<distance>[0-9])";
  27.  
  28.         for (String name : names) {
  29.             if (!racers.containsKey(name)) {
  30.                 racers.put(name, 0);
  31.             }
  32.         }
  33.  
  34.         String input;
  35.         while (!"end of race".equals(input = scanner.nextLine())) {
  36.  
  37.             Pattern letterPattern = Pattern.compile(regexLetters);
  38.             Matcher nameMatcher = letterPattern.matcher(input);
  39.             StringBuilder builder = new StringBuilder();
  40.  
  41.             while (nameMatcher.find()) {
  42.                 builder.append(nameMatcher.group("name"));
  43.             }
  44.             String racerName = builder.toString();
  45.  
  46.             Pattern distancePattern = Pattern.compile(regexDistance);
  47.             Matcher distanceMatcher = distancePattern.matcher(input);
  48.             int distance = 0;
  49.  
  50.             while (distanceMatcher.find()) {
  51.                 distance += Double.parseDouble(distanceMatcher.group("distance"));
  52.             }
  53.  
  54.             if (racers.containsKey(racerName)) {
  55.                 racers.put(racerName, racers.get(racerName) + distance);
  56.             }
  57.         }
  58.         racers = racers
  59.                 .entrySet()
  60.                 .stream()
  61.                 .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
  62.                 .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
  63.                         (newVal, oldVal) -> oldVal, LinkedHashMap::new));
  64.  
  65.         int i = 1;
  66.         for (Map.Entry<String, Integer> racer : racers.entrySet()) {
  67.            
  68.             if (i > 3) break;
  69.             String place = "";
  70.  
  71.             switch (i) {
  72.                 case 1:
  73.                     place = "1st place: ";
  74.                     break;
  75.                 case 2:
  76.                     place = "2nd place: ";
  77.                     break;
  78.                 case 3:
  79.                     place = "3rd place: ";
  80.                     break;
  81.             }
  82.             System.out.println(place + racer.getKey());
  83.             i++;
  84.         }
  85.     }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement