Date calendaristice valide
Sarcina ta e, pentru început, să scrii definiția unei metode care primește ca parametru un șir de String-uri, reprezentând grupurile de cuvinte din email care ar putea reprezenta date. Metoda va returna numărul de String-uri care încep cu date calendaristice valide, în formatul zz/ll/aaaa, iar pentru a verifica dacă un String e o dată validă va trebui să te folosești de clasa SimpleDateFormat. Consultă documentația și caută informații suplimentare pe internet pentru a afla în ce fel o poți folosi pentru a verifica dacă o dată e validă sau nu.
Cerință
Scrie o clasă ValidatorDate care să conțină o metodă publică numaraDateValide.
Metoda va primi ca parametru un șir de String (String[]) și va returna un int reprezentând numărul de String-uri din șir care respectă formatul zz/ll/aaaa.
Semnătură metodă:
public static int numaraDateValide(String[] cuvinte)
Exemplu
// clasa ta aici
public class prog {
public static void main(String[] args) {
System.out.println(ValidatorDate.numaraDateValide(new String[]{"Astazi", "este", "01/04/2019", "01/13/2019",
"29/02/200s"}));
// 2
}
}
In java o rezolvare va rog
Răspunsuri la întrebare
Răspuns:
import java.util.Arrays;
import java.util.regex.Pattern;
class ValidatorDate {
static int numaraDateValide(String[] arrayDate) {
/* "^\\d{2}" e echivalent cu „căutăm un șir format din 2 cifre la început (că avem „^”), dacă aveam „$” la final căutam la final etc...” */
/* "^\\d{2}/\\d{2}/\\d{4}$" */
/* ce avem mai sus se traduce ceva de genul 2 cifre la început urmate de un „/” urmate mai apoi de alte 2 cifre și un „/” iar la final să fie 4 cifre */
Pattern regexPattern = Pattern.compile("^\\d{2}/\\d{2}/\\d{4}$");
int contorAsemanari = 0; /* numărăm asemănările, pornim de la 0 */
for (String cuvantCurent : arrayDate) {
/* dacă cuvântul respectă regula de mai sus */
if (regexPattern.matcher(cuvantCurent).matches()) {
/* incrementăm contorul */
contorAsemanari++;
}
}
/* la final returnăm numărul de asemănări */
return contorAsemanari;
/* aceași chestie poate fi făcută și cu un Stream + .filter(...) și .count(...), de exemplu:
Pattern regexPattern = Pattern.compile("^\\d{2}/\\d{2}/\\d{4}$");
return (int) Arrays.stream(arrayDate).filter(cuvantCurent -> regexPattern.matcher(cuvantCurent).matches()).count();
*/
}
}
public class Main {
public static void main(String[] args) {
System.out.println(ValidatorDate.numaraDateValide(
new String[]{"Astazi", "este", "01/04/2019", "01/13/2019", "29/02/200s"}));
}
}