web-dev-qa-db-fra.com

Java récupère la chaîne de mois de l'entier

Existe-t-il un meilleur moyen de compacter cette méthode, c’est-à-dire de réduire la complexité cyclomatique en évitant les cas de commutation?

String monthString;
        switch (month) {
            case 1:  monthString = "January";       break;
            case 2:  monthString = "February";      break;
            case 3:  monthString = "March";         break;
            case 4:  monthString = "April";         break;
            case 5:  monthString = "May";           break;
            case 6:  monthString = "June";          break;
            case 7:  monthString = "July";          break;
            case 8:  monthString = "August";        break;
            case 9:  monthString = "September";     break;
            case 10: monthString = "October";       break;
            case 11: monthString = "November";      break;
            case 12: monthString = "December";      break;
            default: monthString = "Invalid month"; break;
        }
        System.out.println(monthString);
40
shinynewbike

Essayer:

import Java.text.DateFormatSymbols;
monthString = new DateFormatSymbols().getMonths()[month-1];

Vous pouvez également utiliser SimpleDateFormat:

import Java.text.SimpleDateFormat;
System.out.println(new SimpleDateFormat("MMMM").format(date));

(Vous devrez mettre une date avec votre mois dans un objet Date pour utiliser la deuxième option).

98
Flash

Month enum

Vous pouvez utiliser le Month enum. Cette énumération est définie dans le cadre du nouveau Java.time framework intégré à Java 8 et versions ultérieures.

int monthNumber = 10;
Month.of(monthNumber).name();

La sortie serait:

OCTOBRE

Localiser

Localisez dans une langue autre que l’anglais en appelant getDisplayName on the même Enum.

String output = Month.OCTOBER.getDisplayName ( TextStyle.FULL , Locale.CANADA_FRENCH );

sortie:

octobre

16
Abhishek Shah

Prenez un tableau contenant le nom des mois.

String[] str = {"January",      
   "February",
   "March",        
   "April",        
   "May",          
   "June",         
   "July",         
   "August",       
   "September",    
   "October",      
   "November",     
   "December"};

Alors où vous voulez prendre mois utiliser comme suit:

if(i<str.length)
    monthString = str[i-1];
else
    monthString = "Invalid month";
8
Harry Joy

Vous pourriez avoir un tableau de chaînes et un accès par index.

  String months[] = {"January", "February", "March", "April",
                     "May", "June", "July", "August", "September",
                     "October", "November", "December"};
3
cMinor

Cela a déjà été mentionné, mais voici un moyen de placer le code dans une méthode:

    public static String getMonthName(int monthIndex) {
         return new DateFormatSymbols().getMonths()[monthIndex].toString();
    }

ou si vous voulez créer une meilleure erreur qu'une exception ArrayIndexOutOfBoundsException:

    public static String getMonthName(int monthIndex) {
        //since this is zero based, 11 = December
        if (monthIndex < 0 || monthIndex > 11 ) {
            throw new IllegalArgumentException(monthIndex + " is not a valid month index.");
        }
        return new DateFormatSymbols().getMonths()[monthIndex].toString();
    }
2
AS4noob
import Java.time.Month;

Month exemple = new Month.of(12);
//---return a Month object with value of December---

String month = exemple.toString();
//---if you want to convert Month to String---
0
Murillo Tavares