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 :

Syntax blabla:{ } ?


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut Syntax blabla:{ } ?
    J'ai remarqué qu'on peut écrire en java:

    mon_code:{


    }

    je trouve ca sympa dans mes méthods de construction IHM pour fournir une étiquette à des sections de code.

    Mais en faite je sais pas vraiment ce que je fais. Quelqu'un peut il m'expliquer ?

  2. #2
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    T'as pas un exemple sous la main, parce que la je ne vois pas ce que tu entends par ecrire :

    mon_code : {

    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 65
    Par défaut
    C'est pas le if then else simplifié ?
    équivaut à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (toto) {
       A;
    }
    else {
       B
    }

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    // §For each domain in the caddy
    		ArrayList<DomainCaddy> domainList = caddy.getDomainCaddyList();
    		for (int i = 0; i < domainList.size(); i++) {
    			DomainCaddy domainCaddy = domainList.get(i);
     
    			design_firstTrashColumn: {
    				HtmlCommandButton trash = new HtmlCommandButton();
    				// trash.setStyleClass("trashButton");
    				// HtmlGraphicImage trashImage=new HtmlGraphicImage();
    				trash.setImage("/fibo/_images/interface/trash.gif");
     
    				// trash.getChildren().add(trashImage);
    				trash.setImmediate(true);
    				trash.setOnclick("this.form.submit();");
    				trash.getAttributes().put("domaine", domainCaddy);
    				trash.addActionListener(this);
    				panelGridDetail.getChildren().add(trash);
    			}
     
    			HtmlOutputText output = new HtmlOutputText();
     
    			design_domainNameColumn: {
    				output.setValue(domainCaddy.getTotalName());
    				panelGridDetail.getChildren().add(output);
    			}
     
    			design_options_itemColumn: {
    				output.setValue("Enregistrement");
    				panelGridDetail.getChildren().add(output);
    			}
     
    			design_quantity_itemColumn: {
    				HtmlSelectOneMenu selectOnMenu = new HtmlSelectOneMenu();
    				ArrayList<UISelectItem> listUI = this
    						.getAvailableDurationItems(domainCaddy);
    				for (int e = 0; e < listUI.size(); e++) {
    					selectOnMenu.getChildren()
    							.add((UISelectItem) listUI.get(e));
    				}
    				selectOnMenu.setSubmittedValue(domainCaddy.getDuration()
    						.toString());
    				selectOnMenu.addValueChangeListener(this);
    				selectOnMenu.setImmediate(true);
    				selectOnMenu.setOnchange("this.form.submit();");
    				selectOnMenu.getAttributes().put("domaine", domainCaddy);
    				panelGridDetail.getChildren().add(selectOnMenu);
    			}
     
    			design_tarif_column: {
    				output = new HtmlOutputText();
    				output.setValue(domainCaddy.getDurationPrice());
    				panelGridDetail.getChildren().add(output);
    			}
     
    			design_information_column: {
     
    				if (domainCaddy.isCondition()) {
    					HtmlOutputLink outputLink = new HtmlOutputLink();
    					outputLink.setId("condition_image_"
    							+ domainCaddy.getDomainName());
    					outputLink.setOnclick("blabla();return false;");
    					outputLink.setTarget("_blank");
    					outputLink.setValue("info.jsp");
     
    					HtmlGraphicImage image = new HtmlGraphicImage();
    					image.setId("image_image" + domainCaddy.getDomainName());
    					image.setUrl("/_images/interface/picto_conditions.gif");
    					outputLink.getChildren().add(image);
     
    					panelGridDetail.getChildren().add(outputLink);
    				} else {
    					panelGridDetail.getChildren().add(new HtmlPanelGroup());
    				}
    			}
     
    		}
    Et voilà !

  5. #5
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Euh...........................
    C'est quoi ce code?

    Tu es entrain de me dire que tu veux faire de Goto? Parce que cette syntaxe je l'ai jamais vu mais je sais qu'il est possible de faire des goto et j'ai l'impression que c'est ce que tu me montres.

    Je me trompe? En tout cas si c'est ca : Deconseiller!!!

  6. #6
    Membre expérimenté Avatar de hydraland
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut
    Salut,

    Ce sont des étiquettes. En générale elles sont utilisées dans des boucles avec les instructions break et continue. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    test : for(int i = 0; i < 10; i++)
    		{
    		   for(int j = 0; j < 10; j++)
    		   {
    		      if(j==5)
    		      {
    		    	  continue test;
    		      }
    		   }
    		}
    Dans cette exemple quand j = 5 alors tu sort de la boucle for sur les j et tu continue ta boucle sur les i. Je ne sais pas si je suis clair

    Hydraland

  7. #7
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    C'est des étiquettes pour utiliser la fonction goto, break et continue si je ne m'abuse. Mais c'est pas tellement conseillé.

    A+

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,



    Il s'agit en fait des labels qui peuvent être utilisé pour nommer un bloc ou une ligne de code.

    Ils peuvent être utilisé avec les mots-clef break et continue pour spécifier quel condition de contrôle doit être interrompu/reprise...

    Exemple :
    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
    		mon_while: while (true) {
     
    			for (int i=0; i<500; i++) {
     
     
    				if (une_condition) {
    					break; // Stoppe le for() seulement
    				}
     
    				if (une_autre_condition) {
    					break mon_while; // Stoppe le while()
    				}
    			}
     
    		}
    a++

  9. #9
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 112
    Par défaut
    Mais c'est pas tellement conseillé.
    je dirais même qu'on s'en passe tres bien.

    Suivre le fonctionnement de l'algorythme avec "ca" rend le travail plus compliqué, et d'autant pour le debugage

  10. #10
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    Merci bien

    en effet je ne compte pas produire du code spaghetti.
    Cependant je trouve ca interressant de faire des blocs etiquettés pour des morceaux de programmes afin d'avoir une vision plus net du code. Notamment pour avoir l'indentation, et etre sur de ne pas avoir d'effets de bord.

    C'est particulièrement utilie lorsqu'on produit des structures arborescentes, comme les IHM, ou en encore des DOM etc...

    Remarquez que dans mon cas l'utilisation d'une méthode ne se justifie pas.

  11. #11
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par Alec6
    Merci bien

    en effet je ne compte pas produire du code spaghetti.
    Cependant je trouve ca interressant de faire des blocs etiquettés pour des morceaux de programmes afin d'avoir une vision plus net du code. Notamment pour avoir l'indentation, et etre sur de ne pas avoir d'effets de bord.

    C'est particulièrement utilie lorsqu'on produit des structures arborescentes, comme les IHM, ou en encore des DOM etc...

    Remarquez que dans mon cas l'utilisation d'une méthode ne se justifie pas.
    Euh....

    Je te déconseille vraiment d'utiliser les étiquettes pour rendre plus clair ton code... Ca va l'embrouiller plus qu'autre chose... Sans compter qu'en plus ca va l'alourdir et pour rien puisque tu ne comptes pas utiliser les break, continue.

    Si tu veut vraiment étiquettter ton code utilise des commentaires, c'est plus clair et ca n'alourdit pas ton code.

  12. #12
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Citation Envoyé par Alec6
    [..]et etre sur de ne pas avoir d'effets de bord.
    Je vois pas en quoi la pose d'une étiquette va éviter tout effet de bord. A mon avis ça sera tout le contraire.

    Mais ceci dit même dans le J2SE il y a une utilisation des étiquettes: par exemple StringTokenizer si mes souvenirs sont bons.

    A+

  13. #13
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    Citation Envoyé par thibaut
    Mais ceci dit même dans le J2SE il y a une utilisation des étiquettes: par exemple StringTokenizer si mes souvenirs sont bons.
    Non, il n'y a pas d'étiquettes dans StringTokenizer :
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    /*
     * @(#)StringTokenizer.java	1.34 04/05/05
     *
     * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
     * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
     */
     
    package java.util;
     
    import java.lang.*;
     
    /**
     * The string tokenizer class allows an application to break a 
     * string into tokens. The tokenization method is much simpler than 
     * the one used by the <code>StreamTokenizer</code> class. The 
     * <code>StringTokenizer</code> methods do not distinguish among 
     * identifiers, numbers, and quoted strings, nor do they recognize 
     * and skip comments. 
     * <p>
     * The set of delimiters (the characters that separate tokens) may 
     * be specified either at creation time or on a per-token basis. 
     * <p>
     * An instance of <code>StringTokenizer</code> behaves in one of two 
     * ways, depending on whether it was created with the 
     * <code>returnDelims</code> flag having the value <code>true</code> 
     * or <code>false</code>: 
     * <ul>
     * <li>If the flag is <code>false</code>, delimiter characters serve to 
     *     separate tokens. A token is a maximal sequence of consecutive 
     *     characters that are not delimiters. 
     * <li>If the flag is <code>true</code>, delimiter characters are themselves 
     *     considered to be tokens. A token is thus either one delimiter 
     *     character, or a maximal sequence of consecutive characters that are 
     *     not delimiters.
     * </ul><p>
     * A <tt>StringTokenizer</tt> object internally maintains a current 
     * position within the string to be tokenized. Some operations advance this 
     * current position past the characters processed.<p>
     * A token is returned by taking a substring of the string that was used to 
     * create the <tt>StringTokenizer</tt> object.
     * <p>
     * The following is one example of the use of the tokenizer. The code:
     * <blockquote><pre>
     *     StringTokenizer st = new StringTokenizer("this is a test");
     *     while (st.hasMoreTokens()) {
     *         System.out.println(st.nextToken());
     *     }
     * </pre></blockquote>
     * <p>
     * prints the following output:
     * <blockquote><pre>
     *     this
     *     is
     *     a
     *     test
     * </pre></blockquote>
     *
     * <p>
     * <tt>StringTokenizer</tt> is a legacy class that is retained for
     * compatibility reasons although its use is discouraged in new code. It is
     * recommended that anyone seeking this functionality use the <tt>split</tt>
     * method of <tt>String</tt> or the java.util.regex package instead.
     * <p>
     * The following example illustrates how the <tt>String.split</tt>
     * method can be used to break up a string into its basic tokens:
     * <blockquote><pre>
     *     String[] result = "this is a test".split("\\s");
     *     for (int x=0; x&lt;result.length; x++)
     *         System.out.println(result[x]);
     * </pre></blockquote>
     * <p>
     * prints the following output:
     * <blockquote><pre>
     *     this
     *     is
     *     a
     *     test
     * </pre></blockquote>
     *
     * @author  unascribed
     * @version 1.34, 05/05/04
     * @see     java.io.StreamTokenizer
     * @since   JDK1.0
     */
    public
    class StringTokenizer implements Enumeration<Object> {
        private int currentPosition;
        private int newPosition;
        private int maxPosition;
        private String str;
        private String delimiters;
        private boolean retDelims;
        private boolean delimsChanged;
     
        /**
         * maxDelimCodePoint stores the value of the delimiter character with the
         * highest value. It is used to optimize the detection of delimiter
         * characters.
         *
         * It is unlikely to provide any optimization benefit in the
         * hasSurrogates case because most string characters will be
         * smaller than the limit, but we keep it so that the two code
         * paths remain similar.
         */
        private int maxDelimCodePoint;
     
        /**
         * If delimiters include any surrogates (including surrogate
         * pairs), hasSurrogates is true and the tokenizer uses the
         * different code path. This is because String.indexOf(int)
         * doesn't handle unpaired surrogates as a single character.
         */
        private boolean hasSurrogates = false;
     
        /**
         * When hasSurrogates is true, delimiters are converted to code
         * points and isDelimiter(int) is used to determine if the given
         * codepoint is a delimiter.
         */
        private int[] delimiterCodePoints;
     
        /**
         * Set maxDelimCodePoint to the highest char in the delimiter set.
         */
        private void setMaxDelimCodePoint() {
            if (delimiters == null) {
                maxDelimCodePoint = 0;
                return;
            }
     
    	int m = 0;
    	int c;
    	int count = 0;
    	for (int i = 0; i < delimiters.length(); i += Character.charCount(c)) {
    	    c = delimiters.charAt(i);
    	    if (c >= Character.MIN_HIGH_SURROGATE && c <= Character.MAX_LOW_SURROGATE) {
    		c = delimiters.codePointAt(i);
    		hasSurrogates = true;
    	    }
    	    if (m < c)
    		m = c;
    	    count++;
    	}
    	maxDelimCodePoint = m;
     
    	if (hasSurrogates) {
    	    delimiterCodePoints = new int[count];
    	    for (int i = 0, j = 0; i < count; i++, j += Character.charCount(c)) {
    		c = delimiters.codePointAt(j);
    		delimiterCodePoints[i] = c;
    	    }
    	}
        }
     
        /**
         * Constructs a string tokenizer for the specified string. All  
         * characters in the <code>delim</code> argument are the delimiters 
         * for separating tokens. 
         * <p>
         * If the <code>returnDelims</code> flag is <code>true</code>, then 
         * the delimiter characters are also returned as tokens. Each 
         * delimiter is returned as a string of length one. If the flag is 
         * <code>false</code>, the delimiter characters are skipped and only 
         * serve as separators between tokens. 
         * <p>
         * Note that if <tt>delim</tt> is <tt>null</tt>, this constructor does
         * not throw an exception. However, trying to invoke other methods on the
         * resulting <tt>StringTokenizer</tt> may result in a 
         * <tt>NullPointerException</tt>.
         *
         * @param   str            a string to be parsed.
         * @param   delim          the delimiters.
         * @param   returnDelims   flag indicating whether to return the delimiters
         *                         as tokens.
         * @exception NullPointerException if str is <CODE>null</CODE>
         */
        public StringTokenizer(String str, String delim, boolean returnDelims) {
    	currentPosition = 0;
    	newPosition = -1;
    	delimsChanged = false;
    	this.str = str;
    	maxPosition = str.length();
    	delimiters = delim;
    	retDelims = returnDelims;
            setMaxDelimCodePoint();
        }
     
        /**
         * Constructs a string tokenizer for the specified string. The 
         * characters in the <code>delim</code> argument are the delimiters 
         * for separating tokens. Delimiter characters themselves will not 
         * be treated as tokens.
         * <p>
         * Note that if <tt>delim</tt> is <tt>null</tt>, this constructor does
         * not throw an exception. However, trying to invoke other methods on the
         * resulting <tt>StringTokenizer</tt> may result in a
         * <tt>NullPointerException</tt>.
         *
         * @param   str     a string to be parsed.
         * @param   delim   the delimiters.
         * @exception NullPointerException if str is <CODE>null</CODE>
         */
        public StringTokenizer(String str, String delim) {
    	this(str, delim, false);
        }
     
        /**
         * Constructs a string tokenizer for the specified string. The 
         * tokenizer uses the default delimiter set, which is 
         * <code>"&nbsp;\t\n\r\f"</code>: the space character, 
         * the tab character, the newline character, the carriage-return character,
         * and the form-feed character. Delimiter characters themselves will 
         * not be treated as tokens.
         *
         * @param   str   a string to be parsed.
         * @exception NullPointerException if str is <CODE>null</CODE> 
         */
        public StringTokenizer(String str) {
    	this(str, " \t\n\r\f", false);
        }
     
        /**
         * Skips delimiters starting from the specified position. If retDelims
         * is false, returns the index of the first non-delimiter character at or
         * after startPos. If retDelims is true, startPos is returned.
         */
        private int skipDelimiters(int startPos) {
            if (delimiters == null)
                throw new NullPointerException();
     
            int position = startPos;
    	while (!retDelims && position < maxPosition) {
    	    if (!hasSurrogates) {
    		char c = str.charAt(position);
    		if ((c > maxDelimCodePoint) || (delimiters.indexOf(c) < 0))
    		    break;
    		position++;
    	    } else {
    		int c = str.codePointAt(position);
    		if ((c > maxDelimCodePoint) || !isDelimiter(c)) {
    		    break;
    		}
    		position += Character.charCount(c);
    	    }
    	}
            return position;
        }
     
        /**
         * Skips ahead from startPos and returns the index of the next delimiter
         * character encountered, or maxPosition if no such delimiter is found.
         */
        private int scanToken(int startPos) {
            int position = startPos;
            while (position < maxPosition) {
    	    if (!hasSurrogates) {
    		char c = str.charAt(position);
    		if ((c <= maxDelimCodePoint) && (delimiters.indexOf(c) >= 0))
    		    break;
    		position++;
    	    } else {
    		int c = str.codePointAt(position);
    		if ((c <= maxDelimCodePoint) && isDelimiter(c))
    		    break;
    		position += Character.charCount(c);
    	    }
    	}
    	if (retDelims && (startPos == position)) {
    	    if (!hasSurrogates) {
    		char c = str.charAt(position);
    		if ((c <= maxDelimCodePoint) && (delimiters.indexOf(c) >= 0))
    		    position++;
    	    } else {
    		int c = str.codePointAt(position);
    		if ((c <= maxDelimCodePoint) && isDelimiter(c))
    		    position += Character.charCount(c);
    	    }
            }
            return position;
        }
     
        private boolean isDelimiter(int codePoint) {
    	for (int i = 0; i < delimiterCodePoints.length; i++) {
    	    if (delimiterCodePoints[i] == codePoint) {
    		return true;
    	    }
    	}
    	return false;
        }
     
        /**
         * Tests if there are more tokens available from this tokenizer's string. 
         * If this method returns <tt>true</tt>, then a subsequent call to 
         * <tt>nextToken</tt> with no argument will successfully return a token.
         *
         * @return  <code>true</code> if and only if there is at least one token 
         *          in the string after the current position; <code>false</code> 
         *          otherwise.
         */
        public boolean hasMoreTokens() {
    	/*
    	 * Temporarily store this position and use it in the following
    	 * nextToken() method only if the delimiters haven't been changed in
    	 * that nextToken() invocation.
    	 */
    	newPosition = skipDelimiters(currentPosition);
    	return (newPosition < maxPosition);
        }
     
        /**
         * Returns the next token from this string tokenizer.
         *
         * @return     the next token from this string tokenizer.
         * @exception  NoSuchElementException  if there are no more tokens in this
         *               tokenizer's string.
         */
        public String nextToken() {
    	/* 
    	 * If next position already computed in hasMoreElements() and
    	 * delimiters have changed between the computation and this invocation,
    	 * then use the computed value.
    	 */
     
    	currentPosition = (newPosition >= 0 && !delimsChanged) ?  
    	    newPosition : skipDelimiters(currentPosition);
     
    	/* Reset these anyway */
    	delimsChanged = false;
    	newPosition = -1;
     
    	if (currentPosition >= maxPosition)
    	    throw new NoSuchElementException();
    	int start = currentPosition;
    	currentPosition = scanToken(currentPosition);
    	return str.substring(start, currentPosition);
        }
     
        /**
         * Returns the next token in this string tokenizer's string. First, 
         * the set of characters considered to be delimiters by this 
         * <tt>StringTokenizer</tt> object is changed to be the characters in 
         * the string <tt>delim</tt>. Then the next token in the string
         * after the current position is returned. The current position is 
         * advanced beyond the recognized token.  The new delimiter set 
         * remains the default after this call. 
         *
         * @param      delim   the new delimiters.
         * @return     the next token, after switching to the new delimiter set.
         * @exception  NoSuchElementException  if there are no more tokens in this
         *               tokenizer's string.
         * @exception NullPointerException if delim is <CODE>null</CODE>
         */
        public String nextToken(String delim) {
    	delimiters = delim;
     
    	/* delimiter string specified, so set the appropriate flag. */
    	delimsChanged = true;
     
            setMaxDelimCodePoint();
    	return nextToken();
        }
     
        /**
         * Returns the same value as the <code>hasMoreTokens</code>
         * method. It exists so that this class can implement the
         * <code>Enumeration</code> interface. 
         *
         * @return  <code>true</code> if there are more tokens;
         *          <code>false</code> otherwise.
         * @see     java.util.Enumeration
         * @see     java.util.StringTokenizer#hasMoreTokens()
         */
        public boolean hasMoreElements() {
    	return hasMoreTokens();
        }
     
        /**
         * Returns the same value as the <code>nextToken</code> method,
         * except that its declared return value is <code>Object</code> rather than
         * <code>String</code>. It exists so that this class can implement the
         * <code>Enumeration</code> interface. 
         *
         * @return     the next token in the string.
         * @exception  NoSuchElementException  if there are no more tokens in this
         *               tokenizer's string.
         * @see        java.util.Enumeration
         * @see        java.util.StringTokenizer#nextToken()
         */
        public Object nextElement() {
    	return nextToken();
        }
     
        /**
         * Calculates the number of times that this tokenizer's 
         * <code>nextToken</code> method can be called before it generates an 
         * exception. The current position is not advanced.
         *
         * @return  the number of tokens remaining in the string using the current
         *          delimiter set.
         * @see     java.util.StringTokenizer#nextToken()
         */
        public int countTokens() {
    	int count = 0;
    	int currpos = currentPosition;
    	while (currpos < maxPosition) {
                currpos = skipDelimiters(currpos);
    	    if (currpos >= maxPosition)
    		break;
                currpos = scanToken(currpos);
    	    count++;
    	}
    	return count;
        }
    }

  14. #14
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Désolé c'était la classe java.util.Date, mais c'est pas une référence...

  15. #15
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Par défaut
    en faites c'est pas obligé d'utiliser une étiquette, cependant l'utilisation des singletons est pratique car elle encapsule les variables locales + l'indentation.

  16. #16
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par Alec6
    en faites c'est pas obligé d'utiliser une étiquette, cependant l'utilisation des singletons est pratique car elle encapsule les variables locales + l'indentation.
    là je te suis plus

    C'est quoi le rapport entre les étiquettes, le singleton et l'indentation

  17. #17
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Quand il parle de singleton, je pense qu'il parle de englober son code avec des variables locales entre { et }...


    Mais bonjour la lisibilité...

    A titre d'information, quand on parle de singleton ça à une sens trés particulier en POO, même dans tout les cas. Mais un singleton ne signifie jamais ces caractères '{' ou '}'.

    A+

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

Discussions similaires

  1. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 13h53
  2. Syntaxe requete
    Par Chipolata dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/03/2003, 15h22
  3. [Syntaxe] Action simultanée sur plusieurs élements
    Par FranT dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/03/2003, 21h20
  4. Syntaxe TASM <-> MASM
    Par LFC dans le forum Assembleur
    Réponses: 3
    Dernier message: 28/02/2003, 16h56
  5. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 16h33

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