{"id":516,"date":"2012-11-16T11:42:34","date_gmt":"2012-11-16T10:42:34","guid":{"rendered":"http:\/\/blog.devportfolio.net\/?p=516"},"modified":"2012-11-16T11:42:34","modified_gmt":"2012-11-16T10:42:34","slug":"generateur-de-permalien-en-java","status":"publish","type":"post","link":"https:\/\/devportfolio.net\/wp-dev-blog\/generateur-de-permalien-en-java\/","title":{"rendered":"G\u00e9n\u00e9rateur de permalien en Java"},"content":{"rendered":"<p><\/p>\n<p>La m\u00e9thode <b>permalinkBuilder<\/b> pr\u00e9sent\u00e9e ci-dessous permet de transformer une cha\u00eene de caract\u00e8re en une url valide appel\u00e9e <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Permalien\">permalien<\/a>.<\/p>\n<p><u>La signature est la suivante :<\/u><\/p>\n<pre>\n\n\/**\t\n * \tCette m\u00e9thode permet de construire une url valide \u00e0 partir du libell\u00e9 pass\u00e9 en param\u00e8tre.\n *\tLe libell\u00e9 subit plusieurs transformations avant d'\u00eatre retourn\u00e9 par la m\u00e9thode :\n *\n *\t- remplacement des mots identifi\u00e9s dans le param\u00e8tre wordsToReplace (case sentisitif)\n *\t- suppression des mots identifi\u00e9s dans le param\u00e8tre wordsToRemove\t \t \t\n *\t- suppression des caract\u00e8res accentu\u00e9s et mise en minuscule.\t \n *\t- suppression des unit\u00e9s de quantit\u00e9 au format d\u00e9cimal\n *\t- suppression des caract\u00e8res non alphanum\u00e9rics\n *\t- chaque mot est s\u00e9par\u00e9 par un -\n \n *\t@param lib\t\t: libell\u00e9 \u00e0 convertir\n *\t@param wordsToRemove  \t: mots \u00e0 supprim\u00e9s s\u00e9par\u00e9s par des pipes (ex : le|la|les|de|du|des|\u00e0|aux )\n *\t@param wordsToReplace   : mot \u00e0 remplacer s\u00e9par\u00e9s par des ; (ex: cin\u00e9ma:cin\u00e9;%:pourcentage)\n *\/\npublic static String permalinkBuilder( String lib, String wordsToRemove, String wordsToReplace )\n<\/pre>\n<pre>\n\n\/*------------------------------------*\/\n\/* Test unitaire de permalinkBuilder  *\/\n\/*------------------------------------*\/\n\nArrayList<String> libs = new ArrayList<String>();\n\nlistLibWeb.add(\"Tout sur... l'echalote\");\nlistLibWeb.add(\"Pljeskavica (hamburger des Balkans)\");\nlistLibWeb.add(\"Magret de canard du Sud-Ouest (pi\u00e8ce de 300-400g)\");\nlistLibWeb.add(\"8 palets de l\u00e9gumes courgettes\/poivrons-brebis\");\nlistLibWeb.add(\"Le P'tit Tendre\");\nlistLibWeb.add(\"Portions de filets (4-6 p)\");\nlistLibWeb.add(\"St Jacques, 1,2 \u00e0 1,7 kg\");\n\t\t\t  \nString wordsToRemove  = \"le|la|les|de|du|des|\u00e0|aux\";\nString wordsToReplace = \"P'tit:Ptit;(4-6 p):4 \u00e0 6 personnes\";\n\n\/* Parcourir l'ensemble des libell\u00e9s *\/\nfor (String s : libs )\n{\n   \/* Convertir en permaliens *\/\n   String permalink = permalinkBuilder(s, wordsToRemove, wordsToReplace);\n   System.out.println(permalink);\n}\n\n<\/pre>\n<p><u>Le r\u00e9sultat obtenu :<\/u><br \/>\n<br \/>\nTout sur&#8230; l&rsquo;echalote<br \/>\ntout-sur-echalote<\/p>\n<p>Pljeskavica (hamburger des Balkans)<br \/>\npljeskavica-hamburger-balkans<\/p>\n<p>Magret de canard du Sud-Ouest (pi\u00e8ce de 300-400g)<br \/>\nmagret-canard-sud-ouest-piece-300-400g<\/p>\n<p>8 palets de l\u00e9gumes courgettes\/poivrons-brebis<br \/>\n8-palets-legumes-courgettes-poivrons-brebis<\/p>\n<p>Le P&rsquo;tit Tendre<br \/>\nptit-tendre<\/p>\n<p>Portions de filets (4-6 p)<br \/>\nportions-filets-4-6-personnes<\/p>\n<p>St Jacques, 1,2 \u00e0 1,7 kg<br \/>\nst-jacques<\/p>\n<p><u>et pour finir l&rsquo;impl\u00e9mentation :<\/u><\/p>\n<pre>\n\nimport java.text.Normalizer;\nimport java.util.*;\n\t\n\/**\t\n * \tCette m\u00e9thode permet de construire une url valide \u00e0 partir du libell\u00e9 pass\u00e9 en param\u00e8tre.\n *\tLe libell\u00e9 subit plusieurs transformations avant d'\u00eatre retourn\u00e9 par la m\u00e9thode :\n *\n *\t\t- remplacement des mots identifi\u00e9s dans le param\u00e8tre wordsToReplace (case sentisitif)\n *\t\t- suppression des mots identifi\u00e9s dans le param\u00e8tre wordsToRemove\t \t \t\n *\t\t- suppression des caract\u00e8res accentu\u00e9s et mise en minuscule.\t \n *\t\t- suppression des unit\u00e9s de quantit\u00e9 au format d\u00e9cimal\n *\t\t- suppression des caract\u00e8res non alphanum\u00e9rics\n *\t\t- chaque mot est s\u00e9par\u00e9 par un -\n \n *\t@param lib\t\t\t\t: libell\u00e9 \u00e0 convertir\n *\t@param wordsToRemove  \t: mots \u00e0 supprim\u00e9s s\u00e9par\u00e9s par des pipes (ex : le|la|les|de|du|des|\u00e0|aux )\n *\t@param wordsToReplace   : mot \u00e0 remplacer s\u00e9par\u00e9s par des ; (ex: cin\u00e9ma:cin\u00e9;%:pourcentage)\n *\/\npublic static String permalinkBuilder( String lib, String wordsToRemove, String wordsToReplace ) \n{\t\n\tString permalink = \"\";\n\n\tDictionary dicWordsToReplace = new Hashtable();\n\tString[] replaceTab = wordsToReplace.split(\";\");\n\n\t\/* Conserver les chaines \u00e0 remplacer dans un dictionnaire *\/\n\tfor (int i = 0; i < replaceTab.length; ++i ) \n\t{ \n\t\tif( replaceTab[i].split(\":\").length > 1 )\n\t\t{\n\t\t\tdicWordsToReplace.put( replaceTab[i].split(\":\")[0], replaceTab[i].split(\":\")[1]);\n\t\t}\t\t\t  \t\n\t}\n\n\tpermalink = lib;\n\n\tif( permalink.length() <= 0 )\n\t\treturn \"\";\n\n\t\/* remplacer les mots identifi\u00e9s dans le param\u00e8tre wordsToReplace (case sentisitif) *\/\n\tfor ( Enumeration e = dicWordsToReplace.keys(); e.hasMoreElements(); )\n\t{\n\t\tObject elt = e.nextElement();\n\t\tString regex = elt.toString();\n\t\tString replacement = dicWordsToReplace.get(elt).toString();\n\t\tpermalink = permalink.replaceAll(regex, replacement);\n\t}\t\n\n\tpermalink = permalink.toLowerCase();\n\t\/* Suppression des d\u00e9terminants sp\u00e9cifi\u00e9s dans le fichier ini (ex : le,la,les etc...) *\/\n\tpermalink = permalink.replaceAll(\"\\\\b(\" + wordsToRemove + \")\\\\b\", \" \");\n\t\/* Supprime les accents *\/\n\tpermalink = Normalizer.normalize(permalink, Normalizer.Form.NFD).replaceAll(\"[\\u0300-\\u036F]\", \"\");\n\t\/* Concat\u00e9nation des entiers \u00e0 leur unit\u00e9 de quantit\u00e9 correspondante *\/\n\tpermalink = permalink.replaceAll(\"(\\\\d+)\\\\s+(kg|g|mg|l|dl|ml)\\\\b\", \"$1$2\");\n\t\/* Supprimer les unit\u00e9s de quantit\u00e9 au format d\u00e9cimal *\/\n\tpermalink = permalink.replaceAll(\"\\\\d+,+\\\\d+(\\\\s*(kg|g|mg|l|dl|ml))?\", \"\");\n\t\/* Supprimer les caract\u00e8res non alphanum\u00e9ric *\/\n\tpermalink = permalink.replaceAll(\"\\\\W\", \" \");\n\t\/* Supprimer les chaines alpha d'un seul caract\u00e8re *\/\n\tpermalink = permalink.replaceAll(\"\\\\s+\\\\D?\\\\s+\", \" \");\n\t\/* Supprimer les doubles espaces *\/\n\tpermalink = permalink.replaceAll(\"\\\\s+\", \" \");\t\t\t  \t\n\t\/* Remplacer les espaces par un - *\/\n\tpermalink = permalink.replaceAll(\"\\\\s\", \"-\");\n\t\/* Supprimer les - en d\u00e9but et fin de chaine *\/\n\tpermalink = permalink.replaceAll(\"(^-)|(-$)\", \"\");\n\n\treturn permalink;\n}\n\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>La m\u00e9thode permalinkBuilder pr\u00e9sent\u00e9e ci-dessous permet de transformer une cha\u00eene de caract\u00e8re en une url valide appel\u00e9e permalien. La signature est la suivante : \/** * Cette m\u00e9thode permet de construire une url valide \u00e0 partir du libell\u00e9 pass\u00e9 en param\u00e8tre. * Le libell\u00e9 subit plusieurs transformations avant d&rsquo;\u00eatre retourn\u00e9 par la m\u00e9thode : * [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[30,12,31,32,14],"class_list":["post-516","post","type-post","status-publish","format-standard","hentry","category-talend","tag-expression-reguliere","tag-java","tag-permalien","tag-regex","tag-talend"],"_links":{"self":[{"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/posts\/516","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/comments?post=516"}],"version-history":[{"count":0,"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/posts\/516\/revisions"}],"wp:attachment":[{"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/media?parent=516"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/categories?post=516"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devportfolio.net\/wp-dev-blog\/wp-json\/wp\/v2\/tags?post=516"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}