Reputation: 2352
Is there a better way to compact this method i.e. reduce the cyclomatic complexity by avoid the switch cases?
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);
Upvotes: 56
Views: 129794
Reputation: 1424
Month
enumYou could use the Month
enum. This enum is defined as part of the new java.time framework built into Java 8 and later.
int monthNumber = 10;
Month.of(monthNumber).name();
The output would be:
OCTOBER
Localize to a language beyond English by calling getDisplayName
on the same Enum.
Specify a Locale
to determine the human language and cultural norms used in localizing. Example: Locale.of( "fr" , "CA" )
for French language with Canada cultural norms.
String output = Month.OCTOBER.getDisplayName ( TextStyle.FULL , Locale.of( "fr" , "CA" ); // French language, Canada cultural norms.
output:
octobre
Upvotes: 25
Reputation: 59694
Take an array containing months name.
String[] str = {"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"};
Then where you want to take month use as follows:
if(i<str.length)
monthString = str[i-1];
else
monthString = "Invalid month";
Upvotes: 9
Reputation: 828
DateFormatSymbols class provides methods for our ease use.
To get short month strings. For example: "Jan", "Feb", etc.
getShortMonths()
To get month strings. For example: "January", "February", etc.
getMonths()
Sample code to return month string in mmm format,
private static String getShortMonthFromNumber(int month){
if(month<0 || month>11){
return "";
}
return new DateFormatSymbols().getShortMonths()[month];
}
Upvotes: 1
Reputation: 133
This has already been mentioned, but here is a way to place the code within a method:
public static String getMonthName(int monthIndex) {
return new DateFormatSymbols().getMonths()[monthIndex].toString();
}
or if you wanted to create a better error than an 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();
}
Upvotes: 2
Reputation: 19
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---
Upvotes: 1
Reputation: 16753
Try:
import java.text.DateFormatSymbols;
monthString = new DateFormatSymbols().getMonths()[month-1];
Alternatively, you could use SimpleDateFormat:
import java.text.SimpleDateFormat;
System.out.println(new SimpleDateFormat("MMMM").format(date));
(You'll have to put a date with your month in a Date
object to use the second option).
Upvotes: 121
Reputation: 25058
You could have an array of strigs and access by index.
String months[] = {"January", "February", "March", "April",
"May", "June", "July", "August", "September",
"October", "November", "December"};
Upvotes: 3