Advertisement
Guest User

Untitled

a guest
Jul 14th, 2018
416
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.12 KB | None | 0 0
  1. package com.helloworld;
  2.  
  3. import java.util.Collections;
  4. import java.util.Comparator;
  5. import java.util.HashMap;
  6. import java.util.LinkedList;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.Map.Entry;
  10.  
  11. public class Main {
  12.     private static final Map<String, String> REPLACEMENTS = new HashMap<String, String>() {
  13.         private static final long serialVersionUID = 1L;
  14.  
  15.         {
  16.             put("ABW", " Aruba ");
  17.             put("AFG", " Afghanistan ");
  18.             put("AGO", " Angola ");
  19.             put("AIA", " Anguilla ");
  20.             put("ALA", " Åland Islands ");
  21.             put("ALB", " Albania ");
  22.             put("AND", " Andorra ");
  23.             put("ARE", " United Arab Emirates ");
  24.             put("ARG", " Argentina ");
  25.             put("ARM", " Armenia ");
  26.             put("ASM", " American Samoa ");
  27.             put("ATA", " Antarctica ");
  28.             put("ATF", " French Southern Territories ");
  29.             put("ATG", " Antigua and Barbuda ");
  30.             put("AUS", " Australia ");
  31.             put("AUT", " Austria ");
  32.             put("AZE", " Azerbaijan ");
  33.             put("BDI", " Burundi ");
  34.             put("BEL", " Belgium ");
  35.             put("BEN", " Benin ");
  36.             put("BES", " Bonaire, Sint Eustatius and Saba ");
  37.             put("BFA", " Burkina Faso ");
  38.             put("BGD", " Bangladesh ");
  39.             put("BGR", " Bulgaria ");
  40.             put("BHR", " Bahrain ");
  41.             put("BHS", " Bahamas ");
  42.             put("BIH", " Bosnia and Herzegovina ");
  43.             put("BLM", " Saint Barthélemy ");
  44.             put("BLR", " Belarus ");
  45.             put("BLZ", " Belize ");
  46.             put("BMU", " Bermuda ");
  47.             put("BOL", " Plurinational State of Bolivia, ");
  48.             put("BRA", " Brazil ");
  49.             put("BRB", " Barbados ");
  50.             put("BRN", " Brunei Darussalam ");
  51.             put("BTN", " Bhutan ");
  52.             put("BVT", " Bouvet Island ");
  53.             put("BWA", " Botswana ");
  54.             put("CAF", " Central African Republic ");
  55.             put("CAN", " Canada ");
  56.             put("CCK", " Cocos (Keeling) Islands ");
  57.             put("CHE", " Switzerland ");
  58.             put("CHL", " Chile ");
  59.             put("CHN", " China ");
  60.             put("CIV", " Côte d'Ivoire ");
  61.             put("CMR", " Cameroon ");
  62.             put("COD", "  the Democratic Republic of the Congo ");
  63.             put("COG", " Congo ");
  64.             put("COK", " Cook Islands ");
  65.             put("COL", " Colombia ");
  66.             put("COM", " Comoros ");
  67.             put("CPV", " Cabo Verde ");
  68.             put("CRI", " Costa Rica ");
  69.             put("CUB", " Cuba ");
  70.             put("CUW", " Curaçao ");
  71.             put("CXR", " Christmas Island ");
  72.             put("CYM", " Cayman Islands ");
  73.             put("CYP", " Cyprus ");
  74.             put("CZE", " Czechia ");
  75.             put("DEU", " Germany ");
  76.             put("DJI", " Djibouti ");
  77.             put("DMA", " Dominica ");
  78.             put("DNK", " Denmark ");
  79.             put("DOM", " Dominican Republic ");
  80.             put("DZA", " Algeria ");
  81.             put("ECU", " Ecuador ");
  82.             put("EGY", " Egypt ");
  83.             put("ERI", " Eritrea ");
  84.             put("ESH", " Western Sahara ");
  85.             put("ESP", " Spain ");
  86.             put("EST", " Estonia ");
  87.             put("ETH", " Ethiopia ");
  88.             put("FIN", " Finland ");
  89.             put("FJI", " Fiji ");
  90.             put("FLK", " Falkland Islands (Malvinas) ");
  91.             put("FRA", " France ");
  92.             put("FRO", " Faroe Islands ");
  93.             put("FSM", " Federated States of Micronesia, ");
  94.             put("GAB", " Gabon ");
  95.             put("GBR", " United Kingdom ");
  96.             put("GEO", " Georgia ");
  97.             put("GGY", " Guernsey ");
  98.             put("GHA", " Ghana ");
  99.             put("GIB", " Gibraltar ");
  100.             put("GIN", " Guinea ");
  101.             put("GLP", " Guadeloupe ");
  102.             put("GMB", " Gambia ");
  103.             put("GNB", " Guinea-Bissau ");
  104.             put("GNQ", " Equatorial Guinea ");
  105.             put("GRC", " Greece ");
  106.             put("GRD", " Grenada ");
  107.             put("GRL", " Greenland ");
  108.             put("GTM", " Guatemala ");
  109.             put("GUF", " French Guiana ");
  110.             put("GUM", " Guam ");
  111.             put("GUY", " Guyana ");
  112.             put("HKG", " Hong Kong ");
  113.             put("HMD", " Heard Island and McDonald Islands ");
  114.             put("HND", " Honduras ");
  115.             put("HRV", " Croatia ");
  116.             put("HTI", " Haiti ");
  117.             put("HUN", " Hungary ");
  118.             put("IDN", " Indonesia ");
  119.             put("IMN", " Isle of Man ");
  120.             put("IND", " India ");
  121.             put("IOT", " British Indian Ocean Territory ");
  122.             put("IRL", " Ireland ");
  123.             put("IRN", " Islamic Republic of Iran, ");
  124.             put("IRQ", " Iraq ");
  125.             put("ISL", " Iceland ");
  126.             put("ISR", " Israel ");
  127.             put("ITA", " Italy ");
  128.             put("JAM", " Jamaica ");
  129.             put("JEY", " Jersey ");
  130.             put("JOR", " Jordan ");
  131.             put("JPN", " Japan ");
  132.             put("KAZ", " Kazakhstan ");
  133.             put("KEN", " Kenya ");
  134.             put("KGZ", " Kyrgyzstan ");
  135.             put("KHM", " Cambodia ");
  136.             put("KIR", " Kiribati ");
  137.             put("KNA", " Saint Kitts and Nevis ");
  138.             put("KOR", " Republic of Korea, ");
  139.             put("KWT", " Kuwait ");
  140.             put("LAO", " People's Democratic Republic Lao ");
  141.             put("LBN", " Lebanon ");
  142.             put("LBR", " Liberia ");
  143.             put("LBY", " Libya ");
  144.             put("LCA", " Saint Lucia ");
  145.             put("LIE", " Liechtenstein ");
  146.             put("LKA", " Sri Lanka ");
  147.             put("LSO", " Lesotho ");
  148.             put("LTU", " Lithuania ");
  149.             put("LUX", " Luxembourg ");
  150.             put("LVA", " Latvia ");
  151.             put("MAC", " Macao ");
  152.             put("MAF", " Saint Martin (French part) ");
  153.             put("MAR", " Morocco ");
  154.             put("MCO", " Monaco ");
  155.             put("MDA", " Moldova, Republic of ");
  156.             put("MDG", " Madagascar ");
  157.             put("MDV", " Maldives ");
  158.             put("MEX", " Mexico ");
  159.             put("MHL", " Marshall Islands ");
  160.             put("MKD", " the former Yugoslav Republic of Macedonia, ");
  161.             put("MLI", " Mali ");
  162.             put("MLT", " Malta ");
  163.             put("MMR", " Myanmar ");
  164.             put("MNE", " Montenegro ");
  165.             put("MNG", " Mongolia ");
  166.             put("MNP", " Northern Mariana Islands ");
  167.             put("MOZ", " Mozambique ");
  168.             put("MRT", " Mauritania ");
  169.             put("MSR", " Montserrat ");
  170.             put("MTQ", " Martinique ");
  171.             put("MUS", " Mauritius ");
  172.             put("MWI", " Malawi ");
  173.             put("MYS", " Malaysia ");
  174.             put("MYT", " Mayotte ");
  175.             put("NAM", " Namibia ");
  176.             put("NCL", " New Caledonia ");
  177.             put("NER", " Niger ");
  178.             put("NFK", " Norfolk Island ");
  179.             put("NGA", " Nigeria ");
  180.             put("NIC", " Nicaragua ");
  181.             put("NIU", " Niue ");
  182.             put("NLD", " Netherlands ");
  183.             put("NOR", " Norway ");
  184.             put("NPL", " Nepal ");
  185.             put("NRU", " Nauru ");
  186.             put("NZL", " New Zealand ");
  187.             put("OMN", " Oman ");
  188.             put("PAK", " Pakistan ");
  189.             put("PAN", " Panama ");
  190.             put("PCN", " Pitcairn ");
  191.             put("PER", " Peru ");
  192.             put("PHL", " Philippines ");
  193.             put("PLW", " Palau ");
  194.             put("PNG", " Papua New Guinea ");
  195.             put("POL", " Poland ");
  196.             put("PRI", " Puerto Rico ");
  197.             put("PRK", " Democratic People's Republic of Korea, ");
  198.             put("PRT", " Portugal ");
  199.             put("PRY", " Paraguay ");
  200.             put("PSE", " State of Palestine, ");
  201.             put("PYF", " French Polynesia ");
  202.             put("QAT", " Qatar ");
  203.             put("REU", " Réunion ");
  204.             put("ROU", " Romania ");
  205.             put("RUS", " Russian Federation ");
  206.             put("RWA", " Rwanda ");
  207.             put("SAU", " Saudi Arabia ");
  208.             put("SDN", " Sudan ");
  209.             put("SEN", " Senegal ");
  210.             put("SGP", " Singapore ");
  211.             put("SGS", " South Georgia and the South Sandwich Islands ");
  212.             put("SHN", " Saint Helena, Ascension and Tristan da Cunha ");
  213.             put("SJM", " Svalbard and Jan Mayen ");
  214.             put("SLB", " Solomon Islands ");
  215.             put("SLE", " Sierra Leone ");
  216.             put("SLV", " El Salvador ");
  217.             put("SMR", " San Marino ");
  218.             put("SOM", " Somalia ");
  219.             put("SPM", " Saint Pierre and Miquelon ");
  220.             put("SRB", " Serbia ");
  221.             put("SSD", " South Sudan ");
  222.             put("STP", " Sao Tome and Principe ");
  223.             put("SUR", " Suriname ");
  224.             put("SVK", " Slovakia ");
  225.             put("SVN", " Slovenia ");
  226.             put("SWE", " Sweden ");
  227.             put("SWZ", " Swaziland ");
  228.             put("SXM", " Sint Maarten (Dutch part) ");
  229.             put("SYC", " Seychelles ");
  230.             put("SYR", " Syrian Arab Republic ");
  231.             put("TCA", " Turks and Caicos Islands ");
  232.             put("TCD", " Chad ");
  233.             put("TGO", " Togo ");
  234.             put("THA", " Thailand ");
  235.             put("TJK", " Tajikistan ");
  236.             put("TKL", " Tokelau ");
  237.             put("TKM", " Turkmenistan ");
  238.             put("TLS", " Timor-Leste ");
  239.             put("TON", " Tonga ");
  240.             put("TTO", " Trinidad and Tobago ");
  241.             put("TUN", " Tunisia ");
  242.             put("TUR", " Turkey ");
  243.             put("TUV", " Tuvalu ");
  244.             put("TWN", " Taiwan Province of China ");
  245.             put("TZA", " United Republic of Tanzania, ");
  246.             put("UGA", " Uganda ");
  247.             put("UKR", " Ukraine ");
  248.             put("UMI", " United States Minor Outlying Islands ");
  249.             put("URY", " Uruguay ");
  250.             put("USA", " United States of America ");
  251.             put("UZB", " Uzbekistan ");
  252.             put("VAT", " Holy See ");
  253.             put("VCT", " Saint Vincent and the Grenadines ");
  254.             put("VEN", " Bolivarian Republic of Venezuela, ");
  255.             put("VGB", " British Virgin Islands, ");
  256.             put("VIR", " U.S. Virgin Islands, ");
  257.             put("VNM", " Viet Nam ");
  258.             put("VUT", " Vanuatu ");
  259.             put("WLF", " Wallis and Futuna ");
  260.             put("WSM", " Samoa ");
  261.             put("YEM", " Yemen ");
  262.             put("ZAF", " South Africa ");
  263.             put("ZMB", " Zambia ");
  264.             put("ZWE", " Zimbabwe ");
  265.         }
  266.     };
  267.  
  268.     class ReplacementInfo {
  269.         private int startIndex;
  270.         private int endIndex;
  271.         private String replacement;
  272.  
  273.         public ReplacementInfo(int startIndex, int endIndex, String replacement) {
  274.             super();
  275.             this.startIndex = startIndex;
  276.             this.endIndex = endIndex;
  277.             this.replacement = replacement;
  278.         }
  279.  
  280.         public int getStartIndex() {
  281.             return startIndex;
  282.         }
  283.  
  284.         public void setStartIndex(int startIndex) {
  285.             this.startIndex = startIndex;
  286.         }
  287.  
  288.         public int getEndIndex() {
  289.             return endIndex;
  290.         }
  291.  
  292.         public void setEndIndex(int endIndex) {
  293.             this.endIndex = endIndex;
  294.         }
  295.  
  296.         public String getReplacement() {
  297.             return replacement;
  298.         }
  299.  
  300.         public void setReplacement(String replacement) {
  301.             this.replacement = replacement;
  302.         }
  303.  
  304.         @Override
  305.         public int hashCode() {
  306.             final int prime = 31;
  307.             int result = 1;
  308.             result = prime * result + getOuterType().hashCode();
  309.             result = prime * result + endIndex;
  310.             result = prime * result + ((replacement == null) ? 0 : replacement.hashCode());
  311.             result = prime * result + startIndex;
  312.             return result;
  313.         }
  314.  
  315.         @Override
  316.         public boolean equals(Object obj) {
  317.             if (this == obj)
  318.                 return true;
  319.             if (obj == null)
  320.                 return false;
  321.             if (getClass() != obj.getClass())
  322.                 return false;
  323.             ReplacementInfo other = (ReplacementInfo) obj;
  324.             if (!getOuterType().equals(other.getOuterType()))
  325.                 return false;
  326.             if (endIndex != other.endIndex)
  327.                 return false;
  328.             if (replacement == null) {
  329.                 if (other.replacement != null)
  330.                     return false;
  331.             } else if (!replacement.equals(other.replacement))
  332.                 return false;
  333.             if (startIndex != other.startIndex)
  334.                 return false;
  335.             return true;
  336.         }
  337.  
  338.         private Main getOuterType() {
  339.             return Main.this;
  340.         }
  341.  
  342.         @Override
  343.         public String toString() {
  344.             return "ReplacementInfo [startIndex=" + startIndex + ", endIndex=" + endIndex + ", replacement="
  345.                     + replacement + "]";
  346.         }
  347.  
  348.     }
  349.  
  350.     public String replace(String str, Map<String, String> replacementMap) {
  351.         List<ReplacementInfo> replacementInfo = new LinkedList<>();
  352.  
  353.         for (Entry<String, String> entry : replacementMap.entrySet()) {
  354.             int idx = -1;
  355.             do {
  356.                 idx = str.indexOf(entry.getKey(), idx + 1);
  357.                 if (idx != -1) {
  358.                     replacementInfo.add(new ReplacementInfo(idx, idx + entry.getKey().length(), entry.getValue()));
  359.                 }
  360.             } while (idx != -1);
  361.         }
  362.  
  363.         if (replacementInfo.isEmpty()) {
  364.             return str;
  365.         }
  366.  
  367.         Collections.sort(replacementInfo, new Comparator<ReplacementInfo>() {
  368.             @Override
  369.             public int compare(ReplacementInfo o1, ReplacementInfo o2) {
  370.                 return o1.startIndex - o2.startIndex;
  371.             }
  372.         });
  373.  
  374.         int deltaGrowth = replacementInfo.stream()
  375.                 .mapToInt(ri -> ri.getReplacement().length() - (ri.getEndIndex() - ri.getStartIndex())).sum();
  376.  
  377.         StringBuffer strBuffer = new StringBuffer(str.length() + deltaGrowth);
  378.         ReplacementInfo prev = null;
  379.         for (ReplacementInfo cur : replacementInfo) {
  380.             if (prev == null) {
  381.                 if (cur.getStartIndex() > 0) {
  382.                     strBuffer.append(str.substring(0, cur.getStartIndex()));
  383.                 }
  384.             } else if (prev.getEndIndex() < cur.getStartIndex()) {
  385.                 strBuffer.append(str.substring(prev.getEndIndex(), cur.getStartIndex()));
  386.             }
  387.  
  388.             strBuffer.append(cur.replacement);
  389.  
  390.             prev = cur;
  391.         }
  392.         if (prev.getEndIndex() < str.length()) {
  393.             strBuffer.append(str.substring(prev.getEndIndex(), str.length()));
  394.         }
  395.  
  396.         return strBuffer.toString();
  397.     }
  398.  
  399.     public void handleMain(String args[]) {
  400.         String s = "Test CHN another BEL test";
  401.         System.out.println(s);
  402.         System.out.println(replace(s, REPLACEMENTS));
  403.     }
  404.  
  405.     public static void main(String args[]) {
  406.         new Main().handleMain(args);
  407.     }
  408. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement