1 /* 2 * Copyright 2015 Data Archiving and Networked Services (an institute of 3 * Koninklijke Nederlandse Akademie van Wetenschappen), King's College London, 4 * Georg-August-Universitaet Goettingen Stiftung Oeffentlichen Rechts 5 * 6 * Licensed under the EUPL, Version 1.1 or – as soon they will be approved by 7 * the European Commission - subsequent versions of the EUPL (the "Licence"); 8 * You may not use this work except in compliance with the Licence. 9 * You may obtain a copy of the Licence at: 10 * 11 * https://joinup.ec.europa.eu/software/page/eupl 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the Licence is distributed on an "AS IS" basis, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the Licence for the specific language governing 17 * permissions and limitations under the Licence. 18 */ 19 20 package eu.ehri.project.utils; 21 22 /** 23 * Class for handling slugification of strings, for use 24 * in global identifiers. 25 */ 26 public class Slugify { 27 28 private static final String DEFAULT_REPLACE = "-"; 29 30 /** 31 * Slugify the input string using the default replacement string. 32 * @param input the String to slugify 33 * @return the slugified copy of the input string 34 */ 35 public static String slugify(String input) { 36 return slugify(input, DEFAULT_REPLACE); 37 } 38 39 /** 40 * Slugify the input string using the given replacement string. 41 * 42 * @param input the String to slugify 43 * @param replacement the replacement string 44 * @return the slugified copy of the input string 45 */ 46 public static String slugify(String input, String replacement) { 47 return input 48 .replaceAll("[\\p{P}=+<>~\\|]", replacement) 49 .replaceAll("\\s+", replacement) // whitespace 50 .replaceAll(replacement + "+", replacement) // replacements 51 .replaceAll("^" + replacement + "|" + replacement + "$", "") // leading/trailing replacements 52 .toLowerCase(); 53 } 54 } 55