:: Enseignements :: Licence :: L3 :: 2022-2023 :: Programmation Objet avec Java ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) |
String, StringBuilder, égalité, et expressions régulières
|
Exercice 1 - Assignation, égalité, référence
- On considère le code suivant :
var s = "toto";
System.out.println(s.length());
Quel est le type de s ?
Comment le compilateur fait-il pour savoir qu'il existe une méthode length() sur s ?
-
Qu'affiche le code suivant ? Expliquer.
var s1 = "toto";
var s2 = s1;
var s3 = new String(s1);
System.out.println(s1 == s2);
System.out.println(s1 == s3);
-
Quelle est la méthode à utiliser si l'on veut
tester si le contenu des chaînes de caractères est le même ?
var s4 = "toto";
var s5 = new String(s4);
System.out.println(/* comparer contenue de s4 et s5 */);
-
Qu'affiche le code suivant ? Expliquer.
var s6 = "toto";
var s7 = "toto";
System.out.println(s6 == s7);
-
Expliquer pourquoi il est important que java.lang.String
ne soit pas mutable.
-
Qu'affiche le code suivant ?
var s8 = "hello";
s8.toUpperCase();
System.out.println(s8);
Expliquer.
Exercice 2 - En morse. Stop.
Écrire une classe
Morse qui permet, lors de
son exécution, d'afficher les chaînes de caractères
prises en argument séparées 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 ?
Pourquoi sa méthode append(String) renvoie-t-elle un objet de
type StringBuilder ?
-
Réécrire la classe Morse en utilisant
un StringBuilder.
Quel 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) {
var first = args[0];
var second = args[1];
var last = args[2];
System.out.println(first + ' ' + second + ' ' + last);
}
Pourquoi peut-on utiliser ' ' à la place de " " ?
Compiler le code puis utiliser la commande javap
pour afficher le bytecode Java (qui n'est pas un assembleur) généré.
javap -c Test
Que pouvez-vous en déduire ?
-
Compiler le code de la question 1, puis utiliser la commande javap
pour afficher le bytecode Java
généré.
Que pouvez-vous en déduire ?
Dans quel cas doit-on utiliser StringBuilder.append()
plutôt que le + ?
Et pourquoi est-ce que le chargé de TD va me faire les gros yeux si j'écris un +
dans un appel à la méthode append?
Exercice 3 - Reconnaissance de motifs
Le but de cet exercice est la manipulation d'expressions régulières en java.
Nous utiliserons pour cela les classes du paquetage java.util.regex.
-
A quoi servent la classe java.util.regex.Pattern et sa méthode compile ?
A quoi sert la classe java.util.regex.Matcher ?
-
Écrire un programme qui lit des chaînes de caractères sur la ligne de commande
et affiche les chaînes qui correspondent à des nombres, c'est-à-dire les
chaînes dont tous les caractères sont compris entre '0' et '9'.
-
Modifier le programme pour que l'on reconnaisse (et extrait) un nombre même dans le cas où le nombre est précédé
par des caractères qui ne sont pas des chiffres.
Par exemple, les chaïnes "abc", "4de" et "f6h" ne sont pas valide car soit il n'y a pas de nombre soit
elles ne finissent pas par un nombre. La chaïne "789" correspond au nombre 789 et la chaïne "ab3" correspond
au nombre 3 (les caractères avant le nombre ne sont pas pris en compte).
Note: il y a plusieurs façon de faire, penser que matches() n'est pas la seule méthode qui existe
sur un Matcher.
Attention: on ve veut pas créer plusieurs Pattern différents, ou plusieurs Matcher
différents (il y a plus simple).
-
Écrire une méthode qui prend en paramètre une chaîne de caractères contenant une adresse IPv4
et renvoie un tableau de 4 bytes. Il faut tester qu'il s'agit bien d'une adresse valide.
Vous utiliserez pour cela la notion de groupe.
© Université de Marne-la-Vallée