Pendu en Java's cool

Fermé
Romane - 7 févr. 2014 à 12:55
 Romane - 8 févr. 2014 à 21:12
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
A voir également:

3 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
7 févr. 2014 à 18:22
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
Merci beaucoup :)
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
7 févr. 2014 à 19:15
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
Mais ceci marche pour du Java, pas de Java's Cool, non ? Idem pour le "switch"
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
8 févr. 2014 à 19:27
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
Merci beaucoup !
0