Pendu en Java's cool

Romane -  
 Romane -
Bonjour,

Dans le cadre de ma spécialité Informatique Sciences du Numérique en Terminale S, je programme sur Java's cool.
J'ai actuellement un pendu à faire, le mot à deviner doit être choisi dans une liste d'environ 20000 mots mais je suis bloquée ensuite car je n'arrive pas à transformer les lettres avec des accents en lettres correspondantes sans accent afin de mettre tout le mot en majuscule après.
Quelqu'un saurait-il comment faire ?

Merci d'avance

3 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Un switch sur le caractère te permettrait de faire ça facilement :

    public static String removeAccent(char c)
    {
    switch (c)
    {
    case 'e': case 'é': case 'è': case 'ê': return "e";
    case 'E': case 'É': case 'È': case 'Ê': return "E";
    // ...
    }
    }
    0
    1. Romane
       
      Merci beaucoup :)
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      Remarque : il est possible d'utiliser les méthodes et classes de Java pour ne pas avoir à recoder tous les accents à la main. C'est d'autant plus utile que Java supporte l'Unicode, soit 63000 caractères définis, dont 48400 lettres. Tout refaire serait donc fastidieux... et inutile !

      Voici un code utilitaire pour faire cela, mais je me doute qu'il risque d'être un peu ardu à comprendre.

      import static java.lang.Character.UnicodeBlock.*;
      
      import java.lang.Character.UnicodeBlock;
      import java.text.Normalizer;
      
      public class CharactersTools
      {    
          public final static String removeCombiningMarks(String str)
          {
              StringBuilder sb = new StringBuilder();
              for (char c : Normalizer.normalize(str, Normalizer.Form.NFD).toCharArray())
              {
                  UnicodeBlock ub = UnicodeBlock.of(c);
                  if (!ub.equals(COMBINING_DIACRITICAL_MARKS) && !ub.equals(COMBINING_DIACRITICAL_MARKS_SUPPLEMENT) && !ub.equals(COMBINING_HALF_MARKS) && !ub.equals(COMBINING_MARKS_FOR_SYMBOLS))
                      sb.append(c);
              }
              return sb.toString();
          }
      }
      public class Test
      {
          public static void main(String[] args)
          {
              System.out.println(CharactersTools.removeCombiningMarks("abc 123 àéï ÂÙÖ #*%")); // abc 123 aei AUO #*%
          }
      }
      0
  2. Romane
     
    Mais ceci marche pour du Java, pas de Java's Cool, non ? Idem pour le "switch"
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Le Java's Cool c'est du Java, il y a juste des facilités d'usages pour vous materner un peu, ce qui du coup peut effectivement entraîner des limitations d'usages, mais rien de fondamental.

      Par exemple au lieu de
      public static void main(String[] args)
      qui est le point d'entrée Java, tu auras juste le
      void main()
      en Java's Cool, mais ça fait pareil. De même que le
      println
      en Java's Cool est un raccourci au
      System.out.println
      du Java.

      Je viens d'adapter mon code Java pour le faire rentrer dans la proglet javaProg, sur le fond il est tout à fait compatible avec Java's Cool, il y a juste la forme qui change un peu.

      import static java.lang.Character.UnicodeBlock.*;
      
      import java.lang.Character.UnicodeBlock;
      import java.text.Normalizer;
      
      public final static String removeCombiningMarks(String str)
      {
         StringBuilder sb = new StringBuilder();
         for (char c : Normalizer.normalize(str, Normalizer.Form.NFD).toCharArray())
         {
             UnicodeBlock ub = UnicodeBlock.of(c);
             if (!ub.equals(COMBINING_DIACRITICAL_MARKS) && !ub.equals(COMBINING_DIACRITICAL_MARKS_SUPPLEMENT) && !ub.equals(COMBINING_HALF_MARKS) && !ub.equals(COMBINING_MARKS_FOR_SYMBOLS))
                 sb.append(c);
         }
         return sb.toString();
      }
          
      void main()
      {
          println(removeCombiningMarks("abc 123 àéï ÂÙÖ #*%")); // abc 123 aei AUO #*%
      }
      0