Exercice01_PhraseRetourTélécharger Un premier exercice consistant à réaliser des traitements élémentaires sur une phrase. EnonceExercice01.pdf compil.bat mkdir bin del /f /s /q bin\*.class javac -d bin -classpath "src" src/fr/cnam/exo1/*.java pause run.bat java -classpath "bin" fr.cnam.exo1.Exercice01 pause src fr cnam exo1 Exercice01.java package fr.cnam.exo1; // Exercice sur les chaines de caractère. public class Exercice01 { /** méthode principale de l'exercice */ public static void main(String... args) throws Exception { while (true) { // Création de la phrase String chaine = Phrase.saisirChaine("Saisir la chaine de la phrase"); Phrase phrase = new Phrase(chaine); // On vérifie les mots de la phrase System.out.println("Les mots de la phrase : "); for(String mot:phrase.getMots()) System.out.print("["+mot+"] "); System.out.println(); // Teste si la phrase est un palindrome if (phrase.palindrome()) System.out.println("La phrase est un palindrome"); else System.out.println("La phrase n'est pas un palindrome"); // Rechercher un mot dans la phrase String motARechercher = Phrase.saisirChaine("Saisir un mot à rechercher (vide pour arrêter)"); while (!motARechercher.equals("")) { if(phrase.rechercher(motARechercher)) System.out.println("Mot trouvé"); else System.out.println("Mot non trouvé"); motARechercher = Phrase.saisirChaine("Saisir un mot à rechercher"); } // Calculer le nombre d'occurences d'un caractère dans la phrase String occurence = Phrase.saisirChaine("Saisir un caractère (vide pour arrêter)"); while (!occurence.equals("")) { occurence=occurence.toLowerCase(); int nbOccurences = phrase.getOccurences(occurence.charAt(0)); if (nbOccurences==-1) System.out.println("Veuillez saisir une lettre de 'a' à 'z'"); else System.out.println("Nombre d'occurences = "+nbOccurences); occurence = Phrase.saisirChaine("Saisir un caractère (vide pour arrêter)"); } // Concaténation de la phrase avec une 2ème phrase String chaine2 = Phrase.saisirChaine("Saisir la chaine de la deuxième phrase"); Phrase phrase2 = new Phrase(chaine2); Phrase phraseConcat = phrase.concatener(phrase2); System.out.println(phraseConcat.getPhrase()); } } } Phrase.java package fr.cnam.exo1; /** Classe de définition d'une phrase.<br> Une phrase est avant tout une chaîne de caractères dont les mots sont espacés par des caractères blancs. */ import java.util.*; import java.io.*; public class Phrase { // Les attributs de la classe // private String phrase; // La String de la phrase private ArrayList<String> mots; // Les mots de la phrase private boolean palindrome; // si la phrase est un palidrome private int[] occurences; // tableau des occurences de a..z de la phrase // Methode statique qui demande de saisir une chaine de caractere // static public String saisirChaine(String invitation) throws IOException { System.out.print(invitation+" : "); System.out.flush(); return new BufferedReader(new InputStreamReader (System.in)) .readLine(); } // Constructeur de la phrase // public Phrase(String phrase) { this.phrase = phrase; isolerMots(); calculerPalindrome(); calculerOccurences(); } // Methode qui isole les mots de la phrase // Les mots isolés sont stockés dans la liste en minuscule // private void isolerMots() { mots = new ArrayList<String>(); StringTokenizer strTok = new StringTokenizer(phrase," ',;.-"); while (strTok.hasMoreTokens()) { mots.add(strTok.nextToken().toLowerCase()); } } // Initialisation de l'attribut palindrome // Détermine si la phrase est un palindrome // private void calculerPalindrome() { String str1=""; String str2=""; for(String s:mots) str1=str1+s; for(String s:mots) str2=reverse(s)+str2; palindrome = str1.equals(str2); } // Recherche d'un mot dans la phrase // public boolean rechercher(String motARechercher) { return mots.contains(motARechercher.toLowerCase()); } // Initialisation de l'attribut occurences // Détermine les occurences des lettres de l'alphabet // private void calculerOccurences() { String phraseLower = phrase.toLowerCase(); occurences = new int[26]; for(int i=0;i<26;i++) { char c = (char)((int)'a'+i); int nb=0; for(int k=0;k<phraseLower.length();k++) if (phraseLower.charAt(k)==c) nb++; occurences[i]=nb; } } // Retourne le nombre d'occurence d'une lettre // public int getOccurences(char ch) { int index = ((int)ch - (int)'a'); if (index<0 || index>=26) return -1; return occurences[index]; } // Concaténation de 2 phrases // public Phrase concatener(Phrase ph) { return new Phrase(phrase+ph.phrase); } // Retourne la chaine de la phrase // public String getPhrase() { return phrase; } // Retourne les mots de la phrase // public ArrayList<String> getMots() { return mots; } // Retourne si la phrase est un palindrome // public boolean palindrome() { return palindrome; } // Méthode statique interne qui renverse une chaîne de caractère // static private String reverse(String str) { String res=""; for(int i=0;i<str.length();i++) res=str.charAt(i)+res; return res; } }