L'équivalent de la fonction C scanf() en Java

jeudi 18 octobre 2001

Il n’existe pas par défaut en Java de méthode permettant de récupérer une série de nombres venant de l’utilisateur, comme le fait la méthode scanf() en C/C++. Il faut donc ruser, et écrire quelques lignes de code pour arriver à nos fins.

Pour récupérer un argument (chaîne, nombre, …) au cours de l’exécution d’un programme en ligne de commande, il faut utiliser le méthode readline() de la classe DataInputStream. Cette méthode renvoie une chaîne, nous devons ensuite convertir cette chaîne en nombre. Pour cela on utilisera les String Tokenizers.

Ce que vous devez faire: récupérer avec DataInputStream.readline() la chaîne de nombres.
L’utilisateur aura à saisir par exemple "23 32 5 47 22.3 55.221" pour avoir les entiers 23, puis 32, puis 5, puis 47, et les flottants 22.3 et 55.221.
Notre code sépare les différents nombres contenus dans la chaîne:

String s = "23 32 5 47 22.3 55.221";
java.util.StringTokenizer st = new java.util.StringTokenizer(s);
while (st.hasMoreTokens())
{ System.out.println("Le nombre suivant est: " + st.nextToken() + "\n");
}

Voici ce qui sort:
23
32
5
47
22.3
55.221

Pour convertir les chaînes sorties en nombres, on peut utiliser différentes méthodes, dont celle expliquée dans un autre article de cette FAQ (Convertir des String en int, float… et vice-versa).

Voici le code non commenté:

  • String str;
  • str = "25"; // nombre entier
  • int i = Integer.valueOf(str).intValue(); // créer un int à partir de la chaîne
  • System.out.println(i);
  • long l = Long.valueOf(str).longValue(); // créer un long à partir de la chaîne
  • System.out.println(l);
  • str = "25.6"; // nombre à virgule flottante
  • float f = Float.valueOf(str).floatValue(); // créer un float à partir de la chaîne
  • System.out.println(f);
  • double d = Double.valueOf(str).doubleValue(); // créer un double à partir de la chaîne
  • System.out.println(d);

Note: depuis Java 1.1, pour avoir un Short et/ou un Byte on passera par Integer (comme pour avoir un int) mais en utilisant soit Integer.byteValue() soit Integer.shortValue().

Ecrit par Narcanes pour l’association Java-France/Jgflsoft
www.java-france.com / www.jgflsoft.com
Réédité pour Valhalla GFBLOG.
Montpellier, 18 octobre 2001.

Il n’existe pas par défaut en Java de méthode permettant de récupérer une série de nombres venant de l’utilisateur, comme le fait la méthode scanf() en C/C++. Il faut donc ruser, et écrire quelques lignes de code pour arriver à nos fins.

Pour récupérer un argument (chaîne, nombre, …) au cours de l’exécution d’un programme en ligne de commande, il faut utiliser le méthode readline() de la classe DataInputStream. Cette méthode renvoie une chaîne, nous devons ensuite convertir cette chaîne en nombre. Pour cela on utilisera les String Tokenizers.

Ce que vous devez faire: récupérer avec DataInputStream.readline() la chaîne de nombres.
L’utilisateur aura à saisir par exemple "23 32 5 47 22.3 55.221" pour avoir les entiers 23, puis 32, puis 5, puis 47, et les flottants 22.3 et 55.221.
Notre code sépare les différents nombres contenus dans la chaîne:

String s = "23 32 5 47 22.3 55.221";
java.util.StringTokenizer st = new java.util.StringTokenizer(s);
while (st.hasMoreTokens())
{ System.out.println("Le nombre suivant est: " + st.nextToken() + "\n");
}

Voici ce qui sort:
23
32
5
47
22.3
55.221

Pour convertir les chaînes sorties en nombres, on peut utiliser différentes méthodes, dont celle expliquée dans un autre article de cette FAQ (Convertir des String en int, float… et vice-versa).

Voici le code non commenté:

  • String str;
  • str = "25"; // nombre entier
  • int i = Integer.valueOf(str).intValue(); // créer un int à partir de la chaîne
  • System.out.println(i);
  • long l = Long.valueOf(str).longValue(); // créer un long à partir de la chaîne
  • System.out.println(l);
  • str = "25.6"; // nombre à virgule flottante
  • float f = Float.valueOf(str).floatValue(); // créer un float à partir de la chaîne
  • System.out.println(f);
  • double d = Double.valueOf(str).doubleValue(); // créer un double à partir de la chaîne
  • System.out.println(d);

Note: depuis Java 1.1, pour avoir un Short et/ou un Byte on passera par Integer (comme pour avoir un int) mais en utilisant soit Integer.byteValue() soit Integer.shortValue().

Ecrit par Narcanes pour l’association Java-France/Jgflsoft
www.java-france.com / www.jgflsoft.com
Réédité pour Valhalla GFBLOG.
Montpellier, 18 octobre 2001.