:: Enseignements :: ESIPE :: E3INFO :: 2009-2010 :: Programmation Objet avec Java ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) |
String, StringBuilder, egalité, exec et parcours de map.
|
Exercice 1 - Assignation, égalité, référence
-
Qu'affiche le code suivant :
String s1="toto";
String s2=s1;
String s3=new String(s1);
System.out.println(s1==s2);
System.out.println(s1==s3);
Expliquer
-
Quelle est la méthode à utiliser si l'on veux
tester le contenu des chaînes de caractère ?
-
Qu'affiche le code suivant :
String s1="toto";
String s2="toto";
System.out.println(s1==s2);
Expliquer.
-
Expliquer pourquoi il est important que java.lang.String
soit non mutable.
-
Qu'affiche le code suivant :
String s="hello";
s.toUpperCase();
System.out.println(s);
Expliquer
Exercice 2 - En morse. Stop.
Ecrire une classe
fr.umlv.morse.Morse qui permet lors de
son exécution d'afficher les chaînes de caractères
prisent en argument séparé par des
"Stop.".
$ java Morse ceci est drole
ceci Stop. est Stop. drole Stop.
-
Utiliser dans un premier temps,
l'opérateur + qui permet la concaténation
de chaînes de caractères.
-
A quoi sert l'objet java.lang.StringBuilder
Pouquoi sa méthode append(String) renvoie un obejt de
type StringBuilder ?
-
Ré-écire la classe fr.umlv.morse.Morse en utilisant
un StringBuilder.
Quelle est l'avantage par rapport à la solution précédente ?
-
Recopier le code suivant dans une classe de Test :
public static void main(String[] args) {
String first=args[0];
String second=args[1];
String last=args[2];
System.out.println(first+' '+second+' '+last);
}
Compiler le code puis utilise la commande javap
pour afficher l'assembleur
généré
javap -c Test
Que pouvez vous en déduire ?
Dans quel cas doit-on utiliser StringBuilder.append()
plutôt que le + ?
Exercice 3 - Exec
Le but de cet exercice est d'associer les inodes des fichiers du répertoire courant
à leur nom en utilisant la commande /bin/ls avec le paramètre -i.
-
Pour executer une commande système en Java, on peut utiliser les méthodes
exec de la classe java.lang.Runtime.
Quelle méthode doit on utiliser si l'on veut envoyer executer la commande
/bin/ls avec le paramètre -i.
-
Comment récupérer le résultat de l'exécution de la commande ?
-
Sachant que l'on peut obtenir l'objet Runtime avec la méthode
Runtime.getRuntime() et qu'un objet java.util.Scanner
peut prendre un InputStream en paramètre.
Ecrire un programme qui execute la commande /bin/ls
avec le paramètre -i et qui affiche le résultat ligne par ligne.
Rappel: Scanner possède les méthodes hasNextLine, nextLine.
-
Pour communiquer, le système établie un tube entre le programme Java
et la commande système. Il y a en fait deux tubes, un pour la sortie
standard et un pour la sortie d'erreur standard. Si jamais la commande
écrit dans un tube et que le résultat n'est pas lu, le système fini
par bloquer la commande en attente d'une lecture par le programme Java.
Or, actuellement le programme ne lit pas sur la sortie
d'erreur standard donc une commande risque d'être bloqué indéfiniment
par le système.
Pour eviter ce problème, une solution simple consiste à rediriger
la sortie d'erreur standard sur la sortie d'erreur.
Modifier votre code pour utiliser la classe ProcessBuilder
et ainsi rediriger l'erreur standard sur la sortie standard.
-
Modifier votre programme pour que le résultat de la commande ls
soit stocké dans une Map dont les clés sont des i-nodes
(sous forme d'un entier long) et les valeurs des noms (sous forme de String).
Note: Il est possible de créer un Scanner sur une String.
-
Parcourir la Map des résultats pour les afficher sous la forme :
nom : un_nom inode: numero_d_inode
Note: On peut utiliser une boucle foreach.
© Université de Marne-la-Vallée