Index: lutinutil/src/java/org/codelutin/util/StringUtil.java diff -u lutinutil/src/java/org/codelutin/util/StringUtil.java:1.20 lutinutil/src/java/org/codelutin/util/StringUtil.java:1.21 --- lutinutil/src/java/org/codelutin/util/StringUtil.java:1.20 Sat Nov 17 10:35:35 2007 +++ lutinutil/src/java/org/codelutin/util/StringUtil.java Mon Nov 19 18:24:32 2007 @@ -22,9 +22,9 @@ * * @author POUSSIN Benjamin * Copyright Code Lutin - * @version $Revision: 1.20 $ + * @version $Revision: 1.21 $ * - * Mise a jour: $Date: 2007-11-17 10:35:35 $ + * Mise a jour: $Date: 2007-11-19 18:24:32 $ * par : $Author: tchemit $ */ package org.codelutin.util; @@ -503,4 +503,72 @@ return result; } + static public void printCardinalite(StringBuilder sb, String txt, int min, int max, boolean mandatory) { + boolean print = false; + if (!mandatory) { + if (max == -1) { + sb.append('(').append(txt).append(')'); + sb.append('*'); + } else { + if (max == 1&& min==0) { + sb.append('[').append(txt).append(']'); + } else { + sb.append('(').append(txt).append(')'); + print = true; + } + + } + } else { + sb.append('(').append(txt).append(')'); + if (max == -1 && min == 1) { + sb.append('+'); + } else { + if (max != 0 && min != 1) { + print = true; + } + } + } + if (print) { + sb.append('{').append(min).append(',').append(max).append('}'); + } + } + + /** + * Vérifie q'une chaine de caractère est valid pour les bloc openner closer, ie. + *

+ * que les blocs définit par les deux caractères s'entrechevauchent pas. + *

+ * Exemple avec '(' ')' : + *

+ * (a(b)) est valide, par contre ((aaa))) n'est pas valide + * + * @param txt txte a verifier + * @param opener le caractère ouvrant + * @param closer le caractère fermant + * @return true is la chaine est valide + */ + public static boolean checkEnclosure(String txt, final char opener, char closer) { + if (txt.indexOf(opener) == -1 && txt.indexOf(closer) == -1) { + // ok pas de block détectés + return true; + } + List opens = new ArrayList(); + for (int i = 0; i < txt.length(); i++) { + char c = txt.charAt(i); + if (c == opener) { + // add a open block + opens.add(i); + continue; + } + if (c == closer) { + if (opens.isEmpty()) { + // problem no block left + return false; + } + // on supprime le dernier bloc + opens.remove(opens.size() - 1); + } + } + return opens.isEmpty(); + } }