Exercicis

Exercici 1: Extracció de dominis de correu electrònic

Crear un programa que extraga tots els dominis de correu electrònic (la part després del @) d’un text i mostrar-los per consola.

  • Utilitza una expressió regular per identificar les adreces de correu electrònic dins d’un text.
  • Utilitza els mètodes find() i group() per a extreure i mostrar només la part del domini.

Exemple d’entrada:

String text = "Els meus correus són joan@gmail.com, maria@universitat.es i pere@empresa.net";

Exemple de sortida:

Dominis trobats:
gmail.com
universitat.es
empresa.net

Exercici 2: Validació de números de targeta de crèdit

Objectiu: Escriure un programa que valide números de targeta de crèdit seguint un patró bàsic: quatre grups de quatre dígits separats per un guió (-) o un espai ( ).

Detalls:

  • La expressió regular ha de permetre tant números amb guions com amb espais, però no barrejats.
  • Utilitza matches() per verificar si el número és vàlid.

Exemple d’entrada:

String numero = "1234-5678-9123-4567";

Exemple de sortida:

El número de targeta és vàlid.

Exercici 3: Compta les paraules d’una frase

Objectiu: Crear un programa que conte quantes paraules té una frase utilitzant expressions regulars.

Detalls:

  • Una paraula es defineix com qualsevol seqüència de caràcters alfabètics ([A-Za-z]+).
  • Utilitza find() per comptar el nombre de paraules que compleixen amb aquest patró.

Exemple d’entrada:

String frase = "Això és un exercici senzill de Java.";

Exemple de sortida:

La frase té 6 paraules.

Exercici Combinat

Fitxer d’entrada: cosesquepasen.txt

Copia el text indicat en l’enunciat original dins d’un fitxer cosesquepasen.txt al mateix directori del programa.

Aula d’informàtica, dimarts de matí.

Pep entra correntment a classe i crida: “Profe! El meu ordinador fa un soroll estrany!” El profe respon tranquil·lament: “Això no és soroll, és el ventilador intentant sobreviure al teu codi, Pep.” Oh! Tota la classe riu estrepitosament.

Maria comenta rient: “Ahir vaig trencar el teclat. I saps què vaig fer? Control + Alt + Plorar.” Ai! Pere es tapa la cara desesperadament i diu: “Jo vaig intentar menjar mentre programava… ara tinc pa dins del teclat!” Uf! Toni esclata: “Això sí que és menjar ràpid!”

El profe diu seriosament: “Sou uns tontos, però almenys divertits.” Eh! Anna alça la mà educadament: “Profe, si pose un ‘;’ després de cada frase, també compila millor la meua redacció?” El profe sospira llargament i diu: “Només si declares bé les idees.”

Mentrestant, Jordi murmura discretament: “Jo vaig trobar una nova dieta.” Pep pregunta curiosament: “Quina?” Jordi respon orgullosament: “Només menjar quan el programa compila bé.” Maria esclata rient: “Això vol dir que ja no tornaràs a menjar mai!”

Després d’uns minuts de caos, el profe intenta restaurar l’ordre: “Silenci, si no acabeu l’exercici, vos pose un examen sorpresa!” Tots callen immediatament… menys Toni, que diu tímidament: “Profe, què és més trist que un error 404?” El profe contesta: “Un alumne que no sap on està el seu arxiu .java.” Tota la classe riu fortament.

Ai! Maria exclama: “El meu ordinador diu que té massa cookies i poca memòria!” Pep replica: “Doncs el meu està tan roí que ja no vol iniciar-se!” El profe es posa les mans al cap i diu: “Este grup és pitjor que un bucle infinit!” Eh! Tots esclaten a riure sorollosament.

Quan acaba la classe, Anna diu dolçament: “Malgrat tot, profe… ens agrada programar.” El profe somriu sincerament i respon: “Jo també… però demà vos explique com es declara una variable sense declarar la guerra!”

Fi del dia, i el compilador encara tremola.

Tasques

  1. Lectura del fitxer (línia a línia)

    • Pista: fes servir BufferedReader amb InputStreamReader(new FileInputStream(...), StandardCharsets.UTF_8).
  2. Aplica estos patrons regex i mostra coincidències per a cada línia:

    • Noms propis: \\b[A-ZÀ-ÿ][a-zà-ÿ]+\\b

      • Pista: compila un Pattern i recorre les coincidències amb Matcher.find(). Guarda-les temporalment en una llista.
    • Adverbis en -ment: \\b[a-zA-ZÀ-ÿ]+ment\\b

      • Pista: reutilitza el mateix esquema Pattern + Matcher.
    • Interjeccions: \\b(oh|ai|uf|eh)!\\b (usa CASE_INSENSITIVE)

      • Pista: passa el flag Pattern.CASE_INSENSITIVE quan faces Pattern.compile(...).
    • Censura (paraules prohibides): \\b(tonto|roí|lleig|idiota)\\b (també CASE_INSENSITIVE)

      • Pista: per a la línia censurada, usa matcher.replaceAll("****").
  3. Imprimeix també la línia censurada substituint tonto|roí|lleig|idiota per ****.

  4. Guarda TOTS els resultats en un fitxer de text anomenat resultats_exercici.txt:

    • Pista: usa BufferedWriter o PrintWriter (sense append, sobreescriu cada vegada).
    • Pista: fes un format tipus:

      Línia N:
        Noms propis: [...]
        Adverbis en -ment: [...]
        Interjeccions: [...]
        Paraules prohibides trobades: [...]
        Censurada: <text censurat>
      
      
    • Opcional (recomanat): al final, escriu un resum amb el total de coincidències de cada categoria.

      • Pista: porta quatre comptadors sencills (int) i ves sumant el tamany de cada llista de coincidències per línia.