簡體   English   中英

如何避免 if else 語句並將它們重寫為更小更干凈的代碼?

[英]How can avoid if else statements and rewrite them into smaller and cleaner code?

我應該以 yyyy""mm""dd 的形式插入一個參數,同時使用“/”、“.”或“-”作為分隔符。 該程序識別使用了哪個分隔符,其他功能不相關。 但是,我確信可以重寫或替換為更清晰的代碼的 if else 語句太多了。 有什么建議?

static String[] weekDays = new String[] {
        "Sun", "Mon", "Tues", "Wednes", "Thurs", "Fri", "Satur"
};

enum weekDays {SUN,MON,TUES,WEDNES,THURS,FRI,SATUR};

static void setCalendarDate(final Calendar cal, final String date, final String seperator) {
    final String[] splitDate = date.split(seperator);
    cal.set(parseInt(splitDate[0]), parseInt(splitDate[1]) - 1, parseInt(splitDate[2]));
}

public static void main(final String[] args) {

    final Calendar cal = Calendar.getInstance();
    if (args.length != 0) {
        if (args[0].contains("-")) {
            setCalendarDate(cal, args[0], "-");
        } else if (args[0].contains("/")) {
            setCalendarDate(cal, args[0], "/");
        } else if (args[0].contains(".")) {
            setCalendarDate(cal, args[0],".");
        }
    }
    final int weekDay = cal.get(Calendar.DAY_OF_WEEK);
    System.out.printf("%sday\n", weekDays[weekDay - 1]);
}

}

我個人會存儲一組有效的分隔符,如下所示:

static final String[] validSeparators = new String[] {"-","/","."};

您可以將分隔符檢查移至setCalendarDate方法本身,檢查字符串是否包含任何適當的字符。 然后我將重構該方法以在無效分隔符上拋出異常,並刪除分隔符參數。

static void setCalendarDate(final Calendar cal, final String date) throws ParseException{
    String separator = null;
    for(String s : validSeparators) {
        if(date.contains(s)) {
            separator = s;
            break;
        }
    }
    if(separator == null) {
        throw new ParseException("No valid separator found", 0);
    }

    final String[] splitDate = date.split(separator);
    cal.set(Integer.parseInt(splitDate[0]), Integer.parseInt(splitDate[1]) - 1, Integer.parseInt(splitDate[2]));
}

另一種選擇是檢查日期字符串的特定字符:

static void setCalendarDate(final Calendar cal, final String date) throws ParseException{       
    String separator = String.valueOf(date.charAt(4));
    if(Arrays.asList(validSeparators).contains(separator)) {
        final String[] splitDate = date.split(separator);
        cal.set(Integer.parseInt(splitDate[0]), Integer.parseInt(splitDate[1]) - 1, Integer.parseInt(splitDate[2]));
    } else {
        throw new ParseException("Valid separator not found", 0);
    }
}

如果您想要額外的安全性,您還可以檢查第 7 個字符並在拆分前比較它們。

最后,您的主要內容現在看起來像這樣:

final Calendar cal = Calendar.getInstance();
if (args.length != 0) {

    try {
        setCalendarDate(cal, args[0]);
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
}
final int weekDay = cal.get(Calendar.DAY_OF_WEEK);
System.out.printf("%sday\n", weekDays[weekDay - 1]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM