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()
igroup()
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
-
Lectura del fitxer (línia a línia)
- Pista: fes servir
BufferedReader
ambInputStreamReader(new FileInputStream(...), StandardCharsets.UTF_8)
.
- Pista: fes servir
-
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 ambMatcher.find()
. Guarda-les temporalment en una llista.
- Pista: compila un
-
Adverbis en -ment:
\\b[a-zA-ZÀ-ÿ]+ment\\b
- Pista: reutilitza el mateix esquema
Pattern
+Matcher
.
- Pista: reutilitza el mateix esquema
-
Interjeccions:
\\b(oh|ai|uf|eh)!\\b
(usaCASE_INSENSITIVE
)- Pista: passa el flag
Pattern.CASE_INSENSITIVE
quan facesPattern.compile(...)
.
- Pista: passa el flag
-
Censura (paraules prohibides):
\\b(tonto|roí|lleig|idiota)\\b
(tambéCASE_INSENSITIVE
)- Pista: per a la línia censurada, usa
matcher.replaceAll("****")
.
- Pista: per a la línia censurada, usa
-
-
Imprimeix també la línia censurada substituint
tonto|roí|lleig|idiota
per****
. -
Guarda TOTS els resultats en un fitxer de text anomenat
resultats_exercici.txt
:- Pista: usa
BufferedWriter
oPrintWriter
(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.
- Pista: porta quatre comptadors sencills (
- Pista: usa