Classe utilitaire en Java

La classe présentée ci-dessous a été écrite, d'une part pour économiser la frappe de caractères au clavier, et d'autre part pour faciliter l'apprentissage de Java, en particulier en fournissant des méthodes simples pour effectuer des saisies au clavier.

Des références en lignes sont en fin de ce document.

Pour saisir ...

Un exemple pour saisir un entier au clavier:
      int age=U.int_("votre age ?");
Qui peut aussi être programmé:
      a("votre age ?");int age=U.int_();
  en séparant l'affichage de l'invite et la saisie.

Autre exemple pour saisir une valeur décimale dans une variable x de type float, il suffit d'utiliser la méthode float_ de la classe U, et donc d'écrire:
      U.a("Un décimal : "); x = U.float_();
(ne pas oublier le caractère '_' après 'float', car 'float' tout seul est un mot clé de Java, et ne peut donc pas être un nom de méthode)
La méthode float_(String intitulé) affiche un intitulé avant de saisir une valeur décimale.

Il existe les méthodes et   string_() et   string_(String intitulé)   pour lire au clavier une chaîne de caractères.

Pour avoir moins à taper ...

Un exemple: pour éviter d'avoir trop de caractères à taper au clavier, on remplace:
      System.out.print("Un texte "+ v);
par:
      U.a("Un texte "+ v);
De même l'appel:
      System.out.println("Un texte "+ v);
peut être remplacé par:
      U.a_("Un texte "+ v);
Bien repérer le caractère '_' qui est ajouté pour avoir un affichage avec retour à la ligne' .


Enfin pour afficher un message lié à une exception, on peut utiliser:
      U.a(String message, Exception e);
Voir un exemple d'utilisation dans la programmation de la méthode 'float float_()', ci-dessous.

Le texte de la classe.

Le texte ci-dessous peut être recopié à la souris et placé dans le fichier de nom: U.java.
Les commentaires qui accompagnent le code respectent les conventions 'javadoc'.

/** Classe utilitaire, évitant des frappes au clavier.

    Prototypes des méthodes
    =======================
    Trois méthodes de saisie, après affichage d'une invite
       public static float float_(String intitulé)
       public static int int_(String intitulé) {
       public static String string_(String intitulé) {
    Trois méthodes de saisie, sans invite
       public static float float_()
       public static int int_()
       public static String string_()
    Pour raccourcir la frappe
       static void a( String txt):             affichage
       static void a_( String txt):            affichage et retour à la ligne
       static void a( String txt, Exception e) affichage d'une exception
    La date du jour
       static String date()
*/

import java.io.*;
import java.util.GregorianCalendar;  // cf date()

class U {
/** Flot tamponné associé à l'entrée standard. */
private static BufferedReader clavier =
        new BufferedReader( new InputStreamReader(System.in));

//                       LECTURE D'UN DECIMAL (float)

/** Affiche l'intitulé et lit une valeur numérique décimale
          (lecture bloquante).
    @param intitulé : message affiché, avant la saisie
    @return le décimal(float) lu ou Float.NEGATIVE_INFINITY si les
       caractères lus ne sont pas convertibles en un 'float'.
 */
public static float float_(String intitulé) {
   U.a( intitulé );
   return float_();
   }

/** Lit une valeur numérique décimale (lecture bloquante).
    @return le décimal(float) lu ou Float.NEGATIVE_INFINITY
       si les caractères lus ne sont pas convertibles en
       'float'.
 */
public static float float_() {
   float dd=Float.NEGATIVE_INFINITY;
   try {
      String ch = clavier.readLine().trim();
      while( ch.length()==0 ) ch = clavier.readLine().trim();
      dd=Float.parseFloat(ch);
      }
   catch (NumberFormatException e) {U.a("float_(): (décimal attendu)",e); }
   catch (IOException e) {U.a("float_() (erreur E/S)",e);}
   return dd;
   }

//                       LECTURE D'UN ENTIER (int)

/** Affiche un intitulé et lit une valeur numérique entière
          (lecture bloquante).
    @param intitulé : message affiché, avant la saisie
    @return l'entier lu ou Integer.MIN_VALUE si les
       caractères lus ne sont pas convertibles en un 'int'.
 */
public static int int_(String intitulé) { U.a( intitulé ); return int_(); }

/** Lit une valeur numérique entière (lecture bloquante).
    @return l'entier lu ou Integer.MIN_VALUE si les
       caractères lus ne sont pas convertibles en un 'int'.
 */
public static int int_() {
   int ii=Integer.MIN_VALUE;
   try {
      String ch = clavier.readLine().trim();        // espaces enlevés
      while( ch.length()==0 )
         ch = clavier.readLine().trim();
      // Une possibilité: ii=(new Integer(ch)).intValue();
      ii = Integer.parseInt(ch);
      }
   catch (NumberFormatException e) {
      U.a("FluxCaractère.int_(): (entier attendue!)",e);
      }
   catch (IOException e) {
      U.a("FluxCaractère.int_() (erreur E/S)",e);
      }
   return ii;
   }

//                       LECTURE D'UNE CHAINE (String)

/** Affiche le texte 'intitulé' et lit une ligne au clavier.
    @return suite de caractères lus (sans R/C ni saut de ligne)
 */
public static String string_(String intitulé) {
   U.a( intitulé );
   return string_();
   }
/** Lit une ligne au clavier.
    @return suite de caractères lus (sans R/C ni saut de ligne)
 */
public static String string_() {
   String ch=null;
   try { ch = clavier.readLine(); }
   catch(IOException e) { U.a("U.string_() ", e); }
   return ch;
   }

//                       POUR ABREGER LA FRAPPE

/** Afficher le texte txt.
 * Méthode pour abréger la frappe au clavier, car U.a( est
 * plus court à écrire que System.out.print(
 * @param txt : texte à afficher
 */
static void a( Object txt) {System.out.print(txt);}

/** * Afficher le texte txt, et passer à la ligne
 * @param txt : texte à afficher
 */
static void a_( Object txt) {System.out.println(txt);}

/** Affiche le texte txt, puis le message lié à l'exception.
 * 

La pile d'appels n'est pas affichée.

* @param txt : texte à afficher * @param e : exception */ static void a( String txt, Exception e) { a_("\n"+txt); if( e != null) { // a_(" --> "+e.getLocalizedMessage()); a_(" --> " + e.toString()); // e.printStackTrace(); // trace des appels } } // DATE DU JOUR /** * Date au format: 23 décembre 2003, 5:00:16 * @return date sous forme chaîne */ public static String date() { final String mois[]={"janvier","février","mars","avril","mai","juin" ,"juillet","août","septembre","octbre","novembre","décembre"}; GregorianCalendar cal = new GregorianCalendar(); String hms=""+cal.get(GregorianCalendar.HOUR); int m=cal.get(GregorianCalendar.MINUTE), s=cal.get(GregorianCalendar.SECOND); hms=hms+":"; if( m<10) hms=hms+"0"; hms=hms+m+":"; if( s<10) hms=hms+"0"; hms=hms+s; return "" + cal.get(GregorianCalendar.DAY_OF_MONTH)+' ' + mois[cal.get(GregorianCalendar.MONTH)]+' ' + cal.get(GregorianCalendar.YEAR)+", "+hms; } /** Arrêt de l'exécution, qui reprend en tapant R/C */ static void arrêt() { byte aux[]=new byte[80]; try { a("\nSuite >>> "); System.in.read(aux,0,80);} catch (Exception e) {} } } // fin class U

Et en plus ...

Des propriétés mises à disposition (cf. la documentation sur System.getProperties()), obtenues sous forme chaîne de caractères:

Références