Séance java 2 bis, art ascii solution

Ascii art, la solution mode facile !

Petit excercie trouvé sur codingame.com, permettant de discuter de String et Char…

Nous voilà de retour, pour la suite est fin de notre petit problème ASCII, qui est de faire un petit bout de code java qui produira un texte en art ascii à partir d’un alphabet donné.

La production de l’alphabet ascii peut s’écrire ainsi :

ArrayList<String> ascii = new ArrayList<String>();
for(int i = 0; i < height; i++) {
ascii.add(in.nextLine());}

 

En présupposant, que le logiciel qui appelle notre code, fournit en entrée ( in ), l’alphabet en ascii art comme ci dessus, de A à Z et ? pour remplacer tout caractère autre.

Nous avions vu, dans le chapitre précédent, la mise en forme de l’entrée et le découpage en ‘char’ , ainsi que le simple cast d’un char en int permet d’avoir sa valeur ascii, ce qui est bien pratique pour établir un petit algorithme pour notre petit exercice !

Maintenant voilà, le soucis, si notre programme d’entrée à un soucis et que certaines lettres soient remplacés par des caractères non alphabétique, qu’obtenons nous en sortie? Nous allons supposé que nous désirons ‘?’ si le caractère est inconnu, il ne nous reste plus qu’à identifier les dit lettres …

Une première solution consiste à jouer avec les expression régulières..

Kesako? Les expressions régulières (dites aussi « expressions rationnelles ») sont issues des recherches en mathématiques dans le domaine des automates. Pour la suite on dira « regex »ça sera plus court et c’est une convention entendu.

Les expressions régulières ont de nombreuses utilités en informatique, elles servent principalement pour réaliser :

  • des filtres : ne conserver que certaines lignes d’un fichier texte : par exemples que les lignes de la forme variable=valeur.
  • des contrôles : vérifier qu’une donnée entrée par un utilisateur a bien le format d’une adresse ip par exemple.
  • des substitutions : remplacer un motif par une chaine de caractères précise : par exemple, remplacer les majuscules par des minuscules.
  • des découpages : récupérer une partie d’une chaine de caractères par exemple une date placée dans une chaine de caractères. Ou bien découper une ligne par rapport aux « ; » dans le cas d’un fichier .csv.

Nous entrons ainsi de plein pied dans l’identification, l’analyse et la manipulation de donnée brute, ceci nous amènera par la suite à la gestion d’un moteur de recherche ou à un extratcteur de données optimisées… Mais restons à notre String d’entrée.

En java, l’utilisation des regex se fait via le pattern matching, un système simple qui permet via deux classes, de vérifier si oui ou non, un ensemble de caractère assimilé à la regex est présente, les import associé sont simplement java.regex.Pattern et java.regex.Matcher.

L’utilisation d’une regex pour identifier et manipuler un unique ou un ensemble de caractère est établis par un schéma, une chaîne spécifique :

Pattern pattern = Pattern.compile("[a-zA-Z]|[ ]") ;

Matcher matcher = pattern.matcher(textuel) ;

while (matcher.find()) {

System.out.println(matcher.group()) ;

}

Le sortie ne sera affiché que l’ensemble correspondant à la regex, qui ici indique toute lettre de a à z et de A à Z ( majuscule miniuscule ) ou ( | le pipe) le caractère vide ou espace.

La construction de la Regex est tout un art en soit et je vous

La classe String permet l’utilisation de la méthode replace qui prends en variable une regex qui identifiera le ou les caractères à remplacé et le caractère à insérer.

String testRemplace = test.replace(la_regex, "?");

Pour la conception des regex, je vous invite à voir mon article précédent par ici.

Il deviens alors aisé de testé la chaine d’entrée est d’identifier et remplacé tout caractère qui n’est pas prévu par notre alphabet ascii.

A vous de jouer….

Une autre vision des choses....

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

%d blogueurs aiment cette page :