Подтвердить что ты не робот

Java получает строку месяца из целого числа

Есть ли лучший способ свести этот метод, т.е. уменьшить цикломатическую сложность, избегая случаев переключения?

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);
4b9b3361

Ответ 1

Try:

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

В качестве альтернативы вы можете использовать SimpleDateFormat:

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

(Вы должны будете поместить дату со своим месяцем в объект Date, чтобы использовать второй вариант).

Ответ 2

Month enum

Вы можете использовать перечисление Month. Это перечисление определяется как часть новой java.time, встроенной в Java 8 и более поздних версий.

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

Вывод будет:

октябрь

Localize

Локализовать язык за пределами английского языка, вызывая getDisplayName в том же Enum.

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

выход:

Octobre

Ответ 3

Возьмите массив, содержащий имя месяца.

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

Затем, где вы хотите использовать месяц, например:

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

Ответ 4

У вас может быть массив строк и доступ по индексу.

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

Ответ 5

Это уже упоминалось, но вот способ поместить код в метод:

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

или если вы хотите создать лучшую ошибку, чем 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();
    }

Ответ 6

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---