Expressions régulières

Le package java.util.regex permet de programmer des analyseurs d’expressions régulières:

public class IOProps {
    private static Pattern clefValeur ;// thread safe
    static {
        try {
            clefValeur = Pattern.compile(
                "^\\s*(\\w*)\\s*:(.*)$", Pattern.MULTILINE) ;
        } catch (PatternSyntaxException exc) {
            throw new AssertionError(exc) ;
        }
    }// static

   public static Properties propsDepuis(CharSequence seq) {
      Properties props = new Properties() ;
      try {
         Matcher match = clefValeur.matcher(seq) ;
         while(match.find()) {
            props.put(match.group(1), match.group(2).trim()) ;
         }
      } catch(Exception exc) {
         Logger.getGlobal().log(Level.SEVERE, "", exc) ;
      }
      return props ;
   }
}

Ici on permet d’analyser une CharSequence (StringBuffer, String ou CharBuffer). Chaque ligne est de la forme clef : valeur . L’expression regulière décrit cette syntaxe (on notera les doubles "\" du fait des contraintes de la syntaxe des chaînes Java).

Utilisation avec une CharSequence obtenue à partir d’un Buffer de java.nio:

public static void main(String[] args) throws Exception {
   FileChannel fc = new RandomAccessFile(args[0],"rw").getChannel() ;
   MappedByteBuffer mbb= fc.map(FileChannel.MapMode.READ_WRITE,0,1000) ;
   CharBuffer cseq = mbb.asCharBuffer() ;
   Properties props = IOProps.propsDepuis(cseq);
   System.out.println(props) ;
}

(bien entendu la méthode load de java.util.Properties rend ce service d’une manière plus complète -ceci n’est qu’un programme de démonstration-).