:: Enseignements :: Licence :: L3 :: 2016-2017 :: Programmation Objet avec Java ::
[LOGO]

String, StringBuilder, égalité, et expressions régulières


Exercice 1 - Assignation, égalité, référence

  1. 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.
  2. Quelle est la méthode à utiliser si l'on veut tester si le contenu des chaînes de caractères est le même ?
           String s4 = "toto";
           String s5 = new String(s4);
    
           System.out.println(/* comparer contenue de s4 et s5 */);
         
  3. Qu'affiche le code suivant ?
          String s6 = "toto";
          String s7 = "toto";
    
          System.out.println(s6 == s7);
         
    Expliquer.
  4. Expliquer pourquoi il est important que java.lang.String ne soit pas mutable.
  5. Qu'affiche le code suivant ?
          String s8 = "hello";
          s8.toUpperCase();
          System.out.println(s8);
         
    Expliquer.

Exercice 2 - En morse. Stop.

Écrire une classe fr.umlv.morse.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.
    
  1. Utiliser dans un premier temps l'opérateur + qui permet la concaténation de chaînes de caractères.
  2. A quoi sert l'objet java.lang.StringBuilder ?
    Pourquoi sa méthode append(String) renvoie-t-elle un objet de type StringBuilder ?
  3. Réécrire la classe fr.umlv.morse.Morse en utilisant un StringBuilder.
    Quel est l'avantage par rapport à la solution précédente ?
  4. 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);
           }
          
    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 ?
  5. 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.

  1. A quoi servent la classe java.util.regex.Pattern et sa méthode compile ?
    A quoi sert la classe java.util.regex.Matcher ?
  2. É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'.
  3. Modifier le programme pour que, si une chaîne de caractères commence par des caractères qui ne sont pas des chiffres, ces chiffres soient également affichés (par exemple, avec les chaînes "abc", "ab3", "4de", "f6h" et "789", on affiche : "3 789").
  4. É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.