команда Исключений, чтобы санкционировать дату java

мне хотелось бы санкционировать дату с форматом MM/DD/AA, посредством программы, в которую проводили бы его вышеупомянутую дату как параметр, разделяли ее через StringTokenizer на элементы, и имел в виду исключения производя ошибку, когда это не числовой элемент, если он не вмешался, или если определяется невозможная дата.

Я нахожу проблему, когда я верю в новое исключение и пробую ее объединить в исключение RuntimeException для пустых элементов, или что они не являются числовыми, мне хотелось бы знать лучший способ соединять их и организовывать их правильно.

Спасибо.

public class ValidaFecha {


    public class fechaNoValida extends Exception{
        public fechaNoValida(){ }
        public fechaNoValida(String cadena){
                 super(cadena); //Llama al constructor de Exception y le pasa el contenido de cadena
        }
    }

    public void validarFecha(String fecha) throws fechaNoValida{

        StringTokenizer tokens = new StringTokenizer(fecha,"/");

    while(tokens.hasMoreTokens()){

//            if(tokens.nextToken() == null || tokens.nextToken().isEmpty()){
//                throw new RuntimeException("Has introducido un valor nulo.");
//            }

            if(Integer.parseInt(tokens.nextToken()) <= 0){
                throw new fechaNoValida("Has introducido algún elemento negativo.");
            }

        }
    }

    public void mostrarFecha(String fecha) throws fechaNoValida{
        validarFecha(fecha);
        StringTokenizer tokens=new StringTokenizer(fecha,"/");
    while(tokens.hasMoreTokens()){

            System.out.println(tokens.nextToken());

        }

    }


    public static void main(String[] args) {
        ValidaFecha prueba = new ValidaFecha();
        try{
            prueba.mostrarFecha("11/12/12");
        }catch(fechaNoValida e){
            System.out.println(e.getMessage());
        }catch(RuntimeException ex){
            System.out.println(ex.getMessage());
        }

    }

}
1
задан 02.10.2016, 22:57
2 ответа

Санкционировать дату состоит больше в том, что санкционировать формат, также должно иметь в виду, что число дней соответствует с числом месяца, в предыдущем примере, если он счтет действительным дату 99/99/123, что не соответствует с форматом DD / ММ / YY, могут расширять предыдущую версию:

public void validarFecha(String fecha) throws fechaNoValida{

    StringTokenizer tokens = new StringTokenizer(fecha,"/");
    int pos = 0;
    int dia = 0;
    int mes = 0;
   while(tokens.hasMoreTokens()){
        /* Capturamos el Token para Validar */
        String token = tokens.nextToken();

        if(token == null || token.trim().length()<=0){
            throw new fechaNoValida("Has introducido un valor nulo o vacío.");
        }
        else
        {
          /*Caracter no númerico */
          if(Character.isLetter(token.charAt(0))){
                throw new fechaNoValida("Caracter " + token+  " no Númerico ");
          }
          else if (Integer.parseInt(token) <= 0){
              throw new fechaNoValida("Has introducido algún elemento negativo o cero.");
          }
          else if (pos > 2){
              throw new fechaNoValida("La fecha no corresponde al formato DD/MM/YY");
          }
          else if (pos == 0){
              //Validando el DD no puede ser mayor de 31
              dia = Integer.parseInt(token);
              if (dia > 31)
                throw new fechaNoValida("DD incorrecto");
          }
           else if (pos == 1){          
              //Validando el MM no puede ser mayor de 12
              mes = Integer.parseInt(token);
              if (mes > 12) {
                throw new fechaNoValida("MM incorrecto");
              }
              else {
                //Validando el día en función del mes, solo comprobamos los meses con menos de 31 dias
                switch mes{                 
                    case 2: // 29 dias
                        if (dia > 29)
                            throw new fechaNoValida("El día no corresponde al mes de febrero");
                        break;

                    case 4: // 30 dias
                    case 6: // 30 dias
                    case 9: // 30 dias
                    case 11: // 30 dias
                        if (dia > 30)
                            throw new fechaNoValida("El día no corresponde al mes " + mes);
                        break;

                }
              }
          }
          else if (pos == 2){
              //Validando el MM no puede ser mayor de 99
              if (Integer.parseInt(token) > 100)
                throw new fechaNoValida("YY incorrecto");
          }
          pos = pos + 1;
        }
        /* Imprimir el Token*/
        System.out.println(token);
    }
}
0
ответ дан 24.11.2019, 13:14

Какие-то рекомендации для Ваш cГіdigo:

  • mГ©todo mostrarFecha() делает то же самое, что и validarFecha() podrГ, - чтобы сжимать Ваш lГіgica в один mГ©todo
  • Хранить token в переменной, чтобы реализовывать ее validaciГіn корреспондент, потому что nextToken() он возвращает следующий token (хотя он будет звучать избыточно) то есть, если вводишь A/12/1212 в компьютер ты validaciГіn if, (прокомментированные) harГ - в следующее

    if(tokens.nextToken() == null || tokens.nextToken().isEmpty())
     /* asignando valores haría la siguiente validación*/
    if(A == null || 12.isEmpty())
    

В continuaciГіn Ваш mГ©todo таблетка podrГ, - чтобы оставаться asГ - (Изменяемый, чтобы иметь в виду какие-то утверждения, но это уже оставило его в Ваш imaginaciГіn):

 public void validarFecha(String fecha) throws fechaNoValida{

    StringTokenizer tokens = new StringTokenizer(fecha,"/");
   while(tokens.hasMoreTokens()){
        /* Capturamos el Token para Validar */
        String token = tokens.nextToken();
        if(token == null || token.trim().length()<=0){
            throw new fechaNoValida("Has introducido un valor nulo o vacío.");
        }
        else
        {
          /*Caracter no númerico */
          if(Character.isLetter(token.charAt(0))){
                throw new fechaNoValida("Caracter " + token+  " no Númerico ");
           }
          else if (Integer.parseInt(token) <= 0){
              throw new fechaNoValida("Has introducido algún elemento negativo o cero.");
          }
        }
        /* Imprimir el Token*/
        System.out.println(token);
    }
}
2
ответ дан 24.11.2019, 13:14
  • 1
    Спасибо снова @Dev. Джоэл, сейчас я это вижу много м и # 225; s просвет, и остается понятым все, и верно объясненный. –  Nando 03.10.2016, 15:22