Publié le 13/12/2010
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Decouper un string dans un array

Les exemples suivants expliquent comment découper un String dans un tableau. En fonction d'un caractère aussi appelé délimiteur, les sous-chaines sont extraites vers un Array de type String[].
Lorsque l'on souhaite lire un fichier de configuration au format CSV ou ini, il n'est pas nécessaire d'utiliser de grosses librairies pour parser les fichiers. Voici 2 exemples de lecture rapide d'un string séparé par un délimiteur.

Méthode avec la fonction split()

Dans cet exemple, l'ensemble de la chaine est stocké dans un buffer, puis séparé en fonction d'un délimiteur ';'. Le résultat est un tableau de string d'un taille de 5 blocs.
/**
 * Découper une chaine avec split()
 * @author fobec.com 2010
 */
public class StringSpliter {
    static public void main(String args[]) throws Exception {
        final String txtCSV = "Marcel;duchemin;5,rue de la gare;75000;PARIS";
        String[] n = txtCSV.split(";");
        if (n.length == 0) {
            System.err.print("Delimiteur non trouvée");
        } else {
            System.out.println(txtCSV);
            System.out.println("est composé des sous-chaines:");
            for (int i = 0; i < n.length; i++) {
                System.out.println("- "+n[i]);
            }
        }
    }
}
Résultat de la fonction split()
Les 2 premières lignes correspondent à des logs, à savoir quelle string a été traité. Les 5 derniers blocs sont le contenu du tableau de string.
Marcel;duchemin;5,rue de la gare;75000;PARIS
est composé des sous-chaines:
- Marcel
- duchemin
- 5,rue de la gare
- 75000
- PARIS

Méthode avec la fonction StringTokenizer()

Dans cet exemple, l'objet StringTokenizer est placé sur la chaine à analyser. A chaque fois qu'un délimiteur est trouvé, la fonction renvoie une copie du string se trouvant entre les 2 délimiteurs. Son fonctionnement ressemble à une analyse évènementielle comme le fera SAX pour le format XML.
import java.util.StringTokenizer;
 
/**
 * Découper une chaine avec StringTokenizer()
 * @author fobec.com 2010
 */
public class StringSpliter {
    static public void main(String args[]) throws Exception {
        final String txtNUM = "zero|un|deux|trois";
        StringTokenizer stringTokenizer = new StringTokenizer(txtNUM, "|");
        System.out.println(txtNUM);
        System.out.println("est composé des sous-chaines:");
        while (stringTokenizer.hasMoreTokens()) {
            System.out.println("- " + stringTokenizer.nextToken());
        }
    }
}
Résultat de la fonction StringTokenizer()
Les 2 premières lignes sont des logs, ensuite les 4 lignes suivantes sont les sous-chaines renvoyées par la fonction StringTokenizer().
zero|un|deux|trois
est composé des sous-chaines:
- zero
- un
- deux
- trois

La différence entre les deux fonctions est le type de délimiteur. Alors que StringTokenizer n'accepte que des caractères, il est possible d'utiliser un regex avec la fonction Split().

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - sources
Mise a jour
13/12/2010
Visualisation
vu 7060 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 267 articles
|BIO_PSEUDO|
Commentaires récents

Publié par fobec dans logiciel

Bravo, le soft a trouvé quelques 2400 liens sur le site en un temps record.

Publié par steev dans java

Bjr,
je voudrai savoir comment mettre le son en pause?
aussi comment faire qr qu'il tourne tjr?

Publié par nico dans java

Petite erreur constate.
Apparemment il faut remplacer :
&mailTo = &?body=Envoyer un email avec Java
par &mailTo = < et commercial sans '<' et '>' &body=Envoyer un email avec Java

Publié par Fobec dans java

Bonjour Steev,
un player plus complet est dispo ici: http://www.fobec.com/java/1106/wav-player-avec-bouton-stop-barre-progression.html

Publié par Etiazam dans php5

Si je peux me permettre, il manque l'incrementation dans les deux boucles, telles qu'elles sont presentees elles font tourner le navigateur en rond, il faut donc ajouter
for ($x=0;$x<50;$x...