* 前者比較後者,若前者大於後者則會顯示正整數
* 前者比較後者,若前者小於後者則會顯示負數
* 前者比較後者,若前者等於後者則會顯示 0
```java
String d1 = "0521";
String d2 = "0620";
String bd1 = "0522";
System.out.println(bd1.compareTo(d1) + " " + bd1.compareTo(d2));
//這邊會印出 1 -1
//所以也可以這麼解釋, 當 0 -1, 1 -1, 1 0 在這三種狀況下時,
//代表 0522 是介於 d1 及 d2 之間
String bd2 = "0913";
System.out.println(bd2.compareTo(d1) + " " + bd2.compareTo(d2));
//會印出 4 3, 當兩者都大於 1, 代表 0913 已經超過日期 d1 d2 範圍了
String bd3 = "0123";
System.out.println(bd3.compareTo(d1) + " " + bd3.compareTo(d2));
//會印出 -4 -5, 當兩者都小於 1, 代表 0123 還沒進入日期 d1 d2 範圍
//已知雙子座的日期區間為 0521-0620
//若使用者輸入了 0619 的日期,而系統想要確認他是否為雙子座
//就可以使用 compareTo 的功能
String bd4 = "0620";
System.out.println(bd4.compareTo(d1) + " " + bd4.compareTo(d2));
//這邊會印出 1 0, 意即 0620 大於 0521,且 0620 等於 0620
```
練習題目:讓使用者輸入生日,判斷使用者的星座。
```java
//解法提示:
//解法一、(難度高)判斷使用者輸入的日期是不是剛好大於等於 1222 且小於等於 1231
// 或者大於等於 0101 且小於等於 0119,以及當訖日小於起始日時。
//
//解法二、(難度低)當所有判斷都不成立的時候,代表這日期一定為摩羯座。
// 畢竟不可能有一個日期不屬於任何星座。
//判斷星座的程式碼
String day = "19991223";
String monthDay = day.substring(4); //取到日期 1223
Map<String, String> zodiacDate = zodiacDate();
// 跑 for 迴圈,逐一比對星座日期區間,這邊是使用生日字串作比較
for (Map.Entry<String, String> entry : zodiacDate.entrySet()) {
String[] dates = entry.getValue().split("-"); //分割星座的日期區間字串
String startDate = dates[0]; //該星座的起始日,接下來使用字串比較
String endDate = dates[1]; //該星座的訖日
if (monthDay.compareTo(startDate) >= 0 && monthDay.compareTo(endDate) <= 0) {
System.out.println(day + " is in " + entry.getKey() + "'s date range. ");
break;
}
}
//想繼續使用 date 去比較的話,compareTo 也依然可以用,不過摩羯座問題仍未解
SimpleDateFormat sdf = new SimpleDateFormat("MMdd");
Date monday = sdf.parse(monthDay);
for (Map.Entry<String, String> entry : zodiacDate.entrySet()) {
String[] dates = entry.getValue().split("-");
Date startDate = sdf.parse(dates[0]);
Date endDate = sdf.parse(dates[1]);
if (monday.compareTo(startDate) >= 0 && monday.compareTo(endDate) <= 0) {
System.out.println(day + " is in " + entry.getKey() + "'s date range. ");
break;
}
}
//星座區間 map
Map<String, String> zodiacDate = new HashMap<>();
zodiacDate.put("aquarius", "0120-0218");
zodiacDate.put("pisces", "0219-0320");
zodiacDate.put("aries", "0321-0419");
zodiacDate.put("taurus", "0420-0520");
zodiacDate.put("gemini", "0521-0620");
zodiacDate.put("cancer", "0621-0722");
zodiacDate.put("leo", "0723-0822");
zodiacDate.put("virgo", "0823-0922");
zodiacDate.put("libra", "0923-1022");
zodiacDate.put("scorpio", "1023-1121");
zodiacDate.put("sagittarius", "1122-1221");
zodiacDate.put("capricorn", "1222-0119");
```