Informatică, întrebare adresată de Patrick100, 8 ani în urmă

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 de Apollyon
1

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"}));

   }

}


Patrick100: Cum sa pun conditie in care de exemplu ca o data sa fie valida trebuie sa fie formata din in intervalul 01-30/31 zile, 01-12 luni si 4 cifre an pentru ca daca pun 76/04/2019 imi ia ca o data valida
Apollyon: https://www.baeldung.com/java-date-regular-expressions
Alte întrebări interesante