Java - 比使用 Ifs 和重复函数更好的方法 - DateRelated

Java - Better way then using Ifs and repeating functions - DateRelated

我创建了一个函数来检查我的日期字符串中包含的月份,这样我就可以将它用于多种日期格式。但是我使用了很多 ifs 并重复了 .contains 函数。有更好的方法吗?

另外,我的日期格式为工作日(字符串)、月(字符串)日(int- XX)、年(Int - XXXX)。例如1965 年 6 月 27 日,星期日。到目前为止,我还没有使用内置函数。

    public static int CheckMonth(String s){
    String month = s.toLowerCase();

    if(month.contains("january")){return 1;}
    else if(month.contains("febuary")){return 2;}
    else if(month.contains("march")){return 3;}
    else if(month.contains("april")){return 4;}
    else if(month.contains("may")){return 5;}
    else if(month.contains("june")){return 6;}
    else if(month.contains("july")){return 7;}
    else if(month.contains("august")){return 8;}
    else if(month.contains("september")){return 9;}
    else if(month.contains("october")){return 10;}
    else if(month.contains("november")){return 11;}
    else if(month.contains("december")){return 12;}
    else {return -1;}       
} 

可以使用循环。例如,

// 'lookup'
static String[] monthNames = {"january", .., "december"};

// in method
for (var i = 0; i < months.length; i++) {
   if (monthName.contains(monthNames[i])) {
      return i + 1; // because 0..11 indices in array
   }
}
// do something if no matching month was found

虽然如果尝试 "NLP" 约会,我确定有现有的图书馆..

对于您想做的事情,可以使用枚举来存储文本和数字。例如:

public enum Month {
    JANUARY("january", 1), FEBRUARY("february", 2) ... DECEMBER("december", 12);

    private final String string;
    private final int number;

    private Month(String string, int number) {
        this.string = string;
        this.number = number;
    }

    public int getMonthNumber(String string) {
        for(Month month : Month.values()) {
            if(string.contains(this.string))
                return month.number
        }
        return -1;
    }

}