IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

MessageFormat et parse()


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Par défaut MessageFormat et parse()
    Bonjour, en testant les possibilités de MessageFormat,

    je suis arrivé à l'option choice motif

    Mon problème est le suivant :

    une chaine : String texte = "Actuellement, le {0, date, long}, vous avez {1} message{1, choice, 1#|2#s}.";

    MessageFormat : MessageFormat mess = new MessageFormat(texte);

    les arguments : Object [] arguments = {new Date(),30};

    la méthode format : String st = mess.format(arguments);

    OK tout se passe bien

    Ce qui ne fonctionne pas : je désire parser la chaine pour retrouver le tableau
    d'arguments : si l'argument de départ est > = 2 --> OK ex : 30 (ds cet exemple)
    si l'argument de départ est < 2 --> NOT OK : message erreur


    Une Idée, Merci bcp

    Voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    package tampons_jeter;
     
    import java.text.MessageFormat;
    import java.text.ParseException;
    import java.util.Date;
     
    public class Classe_MessageFormat {
    	public static void main(String[] args) throws ParseException {
     
     
    	String texte = "Actuellement, le {0, date, long}, vous avez {1} message{1, choice, 1#|2#s}.";
     
    	// Méthode parse()
    	//****************
    	System.out.println("Méthode parse()");
     
    	//Object [] arguments = {new Date(),30};  // resultat 2.0
    	Object [] arguments = {new Date(),1};  	  // java.text.ParseException: avec zéro OU 1
    	MessageFormat mess = new MessageFormat(texte);
    	String st = mess.format(arguments);
    	System.out.println(st);
     
    	Object[] recup = mess.parse(st);
     
    	for (Object object : recup) {
    		System.out.println(object);
    	}
     
    	}
    }
     
    /*
    RESULTAT avec 30
    ****************
    Méthode parse()
    Actuellement, le 30 août 2012, vous avez 30 messages.
    Thu Aug 30 00:00:00 CEST 2012
    2.0
     
    RESULTAT avec zéro OU 1
    ****************
    Méthode parse()
    Actuellement, le 30 août 2012, vous avez 1 message.
    Exception in thread "main" java.text.ParseException: MessageFormat parse error!
    	at java.text.MessageFormat.parse(Unknown Source)
    	at tampons_jeter.Classe_MessageFormat.main(Classe_MessageFormat.java:23)
     
    */

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    choice format, c'est pas top top pour le parsing. Exemple ici. Tu verra que les cas 2 et 3 fonctionnent en parsning mais ne donnent pas nécessairement le bon résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    		for (String texte : new String[] {
    				"Actuellement, le {0, date, long}, vous avez {1} message{1, choice, 1#|2#s}.       ",
    				"Actuellement, le {0, date, long}, vous avez {1} {1, choice, 1#message|2#messages}.",
    				"Actuellement, le {0, date, long}, vous avez {1} {1, choice, 1#message|2<messages}."}) {
    			for (int i = 0; i < 4; i++)
    				try {
    					// Méthode parse()
    					// ****************
    					System.out.printf("Travail avec %s [i=%d] \t->\t",texte,i);
     
    					// Object [] arguments = {new Date(),30}; // resultat 2.0
    					Object[] arguments = { new Date(), i }; // java.text.ParseException:
    															// avec zéro OU 1
    					MessageFormat mess = new MessageFormat(texte);
    					String st = mess.format(arguments);
    					System.out.printf("%s \t->\t ",st);
     
    					Object[] recup = mess.parse(st);
    					System.out.println(Arrays.deepToString(recup));
    				} catch (Exception e) {
    					System.out
    							.printf("Erreur avec %d: %s\n", i, e.getMessage());
    				}
    		}
    Résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Travail avec Actuellement, le {0, date, long}, vous avez {1} message{1, choice, 1#|2#s}.        [i=0] 	->	Actuellement, le 30 augustus 2012, vous avez 0 message.        	->	 Erreur avec 0: MessageFormat parse error!
    Travail avec Actuellement, le {0, date, long}, vous avez {1} message{1, choice, 1#|2#s}.        [i=1] 	->	Actuellement, le 30 augustus 2012, vous avez 1 message.        	->	 Erreur avec 1: MessageFormat parse error!
    Travail avec Actuellement, le {0, date, long}, vous avez {1} message{1, choice, 1#|2#s}.        [i=2] 	->	Actuellement, le 30 augustus 2012, vous avez 2 messages.        	->	 [Thu Aug 30 00:00:00 CEST 2012, 2.0]
    Travail avec Actuellement, le {0, date, long}, vous avez {1} message{1, choice, 1#|2#s}.        [i=3] 	->	Actuellement, le 30 augustus 2012, vous avez 3 messages.        	->	 [Thu Aug 30 00:00:00 CEST 2012, 2.0]
    Travail avec Actuellement, le {0, date, long}, vous avez {1} {1, choice, 1#message|2#messages}. [i=0] 	->	Actuellement, le 30 augustus 2012, vous avez 0 message. 	->	 [Thu Aug 30 00:00:00 CEST 2012, 1.0]
    Travail avec Actuellement, le {0, date, long}, vous avez {1} {1, choice, 1#message|2#messages}. [i=1] 	->	Actuellement, le 30 augustus 2012, vous avez 1 message. 	->	 [Thu Aug 30 00:00:00 CEST 2012, 1.0]
    Travail avec Actuellement, le {0, date, long}, vous avez {1} {1, choice, 1#message|2#messages}. [i=2] 	->	Actuellement, le 30 augustus 2012, vous avez 2 messages. 	->	 [Thu Aug 30 00:00:00 CEST 2012, 2.0]
    Travail avec Actuellement, le {0, date, long}, vous avez {1} {1, choice, 1#message|2#messages}. [i=3] 	->	Actuellement, le 30 augustus 2012, vous avez 3 messages. 	->	 [Thu Aug 30 00:00:00 CEST 2012, 2.0]
    Travail avec Actuellement, le {0, date, long}, vous avez {1} {1, choice, 1#message|2<messages}. [i=0] 	->	Actuellement, le 30 augustus 2012, vous avez 0 message. 	->	 [Thu Aug 30 00:00:00 CEST 2012, 1.0]
    Travail avec Actuellement, le {0, date, long}, vous avez {1} {1, choice, 1#message|2<messages}. [i=1] 	->	Actuellement, le 30 augustus 2012, vous avez 1 message. 	->	 [Thu Aug 30 00:00:00 CEST 2012, 1.0]
    Travail avec Actuellement, le {0, date, long}, vous avez {1} {1, choice, 1#message|2<messages}. [i=2] 	->	Actuellement, le 30 augustus 2012, vous avez 2 message. 	->	 [Thu Aug 30 00:00:00 CEST 2012, 1.0]
    Travail avec Actuellement, le {0, date, long}, vous avez {1} {1, choice, 1#message|2<messages}. [i=3] 	->	Actuellement, le 30 augustus 2012, vous avez 3 messages. 	->	 [Thu Aug 30 00:00:00 CEST 2012, 2.0000000000000004]

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Par défaut
    Bonjour Tchize et merci.

    J'ai rencontré cet exemple ds un Tuto et je m'étonnais de ce problème

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de parsing de chaine, tronquer une chaine
    Par Voodo'o_d'ool dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/08/2008, 11h28
  2. Parsing et caractères spéciaux
    Par Shogun dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/10/2004, 17h43
  3. Réponses: 14
    Dernier message: 25/10/2004, 21h33
  4. conversion String en Date (parse trop permissif)
    Par ciloulou dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 13/09/2004, 18h36
  5. [XML] Améliorer le parsing
    Par GLDavid dans le forum Modules
    Réponses: 3
    Dernier message: 19/07/2004, 16h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo