10、常用API(2) & 正則
Date類:類 Date 表示特定的瞬間,精確到毫秒。Date是早期版本出現的,其API中有大量的過時方法,其許多方法由更為新的類Calendar類再次實現。
☆常見方法: 構造方法:public Date() //返回當前時間;public Date(long date) //返回指定毫秒值的日期物件 普通方法:public long getTime() //獲取當前時間物件的毫秒值;public void setTime(long time) //設定時間毫秒值
DateFormat類:DateFormat是用於日期格式化類,即將一個Date物件轉換為一個符合指定格式的字串,也可以將一個符合指定格式的字串轉為一個Date物件。DateFormat是抽象類,我們需要使用其子類SimpleDateFormat。
☆常見方法: 構造方法:public SimpleDateFormat() //使用預設格式建立格式化物件 public SimpleDateFormat(String pattern) //使用指定格式建立格式化物件 主要方法:public final String format(Date date) //將Date轉為字串 public Date parse(String source) //將字串轉為Date(轉換時,該String要符合指定格式,否則不能轉換)
public class Demo {
public static void main(String[] args) throws ParseException {
Date now = new Date();//建立當前時間日期物件
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");//使用指定格式建立格式化物件
String sDate = df.format(now);//呼叫format方法將日期轉換為字串
System.out.println(now);
System.out.println(sDate);
System.out.println("--------------------------------------------" );
String birth = "1949-10-01";//1949-10-01 求給定字串日期的毫秒值
DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd");//建立日期格式化物件
Date d = df2.parse(birth);//呼叫parse方法將字串轉換為日期物件
System.out.println(d.getTime());//呼叫Date類的getTime方法獲取毫秒值
}
}
Calendar類: Calendar是日曆類,在Date後出現,替換掉了許多Date的方法。該類將所有可能用到的時間資訊封裝為欄位值,方便獲取。Calendar為抽象類,由於語言敏感性,Calendar類在建立物件時並非直接建立,而是通過靜態方法建立,將語言敏感內容處理好,再返回子類物件。
☆常見方法:public static Calendar getInstance() //獲取日期物件 public int get(int field) //獲取時間欄位值 public void add(int field,int amount) //指定欄位增加某值 public final void set(int year,int month,int date) //設定年月日 public final Date getTime() //獲取該日曆物件轉成的日期物件
public class Demo {
public static void main(String[] args) {
Calendar rightNow = Calendar.getInstance();//獲取日期物件
System.out.println(rightNow);
int i = rightNow.get(Calendar.YEAR);//獲取時間欄位值
System.out.println(i);
rightNow.add(Calendar.YEAR, -1);//給指定年份減1
System.out.println(rightNow.get(Calendar.YEAR));
rightNow.set(2017, 9, 10);
System.out.println(rightNow);
long time = rightNow.getTime().getTime();//日曆物件轉成的日期物件並獲取毫秒值
long timeInMillis = rightNow.getTimeInMillis();//日曆物件獲取毫秒值
System.out.println(time);
System.out.println(timeInMillis);
}
}
//輸出當前日期
public class Demo {
public static void main(String[] args) {
Date d = new Date();//1、獲取當前日期物件
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 今天是今年的第D天");
SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy.MM.dd E");
String f1 = sdf1.format(d);
String f2 = sdf2.format(d);
String f3 = sdf3.format(d);
System.out.println(f1);
System.out.println(f2);
System.out.println(f3);
}
}
//獲取指定年份的指定月份有多少天
public class Demo {
public static void main(String[] args) {
int day = showDay(2018,2);
System.out.println(day);
}
public static int showDay(int year,int month) {
Calendar c = Calendar.getInstance();
c.set(year, month+1, 1);//獲取到指定年份的下月1日
c.add(Calendar.DATE, -1);//得到當月最後一天
int day = c.get(Calendar.DAY_OF_MONTH);//獲取到當月天數
return day;
}
}
//出生了多少天
public class Demo {
public static void main(String[] args) throws ParseException{
String birth = "2010-01-01";
long day = showDay(birth);
System.out.println(day);
}
public static int showDay(String birth) throws ParseException {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date parse = df.parse(birth);//呼叫parse方法將字串轉換成日期
long time1 = parse.getTime();//獲取給定時間的毫秒值
long time2 = new Date().getTime();//建立當前時間毫秒值
long day = (time2-time1)/1000/60/60/24;
return day;
}
}
System類:System中代表程式所在系統,提供了對應的一些系統屬性資訊,和系統操作。
☆常見方法:public static void gc() //用來執行JVM中的垃圾回收器,完成記憶體中垃圾的清除 public static void exit(int status) //用來結束正在執行的Java程式。引數傳入一個數字即可。通常傳入0記為正常狀態,其他為異常狀態 public static long currentTimeMillis() //獲取當前系統時間與1970年01月01日00:00點之間的毫秒差值,與long time = new Date().getTime();long timeInMillis = Calendar.getInstance().getTimeInMillis();long timeInMillis = Calendar.getInstance().getTime.getTime();方法無異 public static Properties getProperties() //用來獲取指定鍵(字串名稱)中所記錄的系統屬性資訊
☆注意事項:System類不能手動建立物件,因為構造方法被private修飾,阻止外界建立物件。System類中的都是static方法,類名訪問即可。在JDK中,有許多這樣的類。
Math類:Math 類是包含用於執行基本數學運算的方法的數學工具類,如初等指數、對數、平方根和三角函式。類似這樣的工具類,其所有方法均為靜態方法,並且一般不會建立物件。
☆常見方法:public static int abs(int a) //絕對值 public static double ceil(double a) //向上取整 public static double floor(double a) //向下取整 public static int max/min(int a,int b) //取最大最小值 public static double pow(double a,double b) //a^b public static double random() //產生隨機數 public static int round(float a) //四捨五入
public class Demo {
public static void main(String[] args) {
System.out.println(Math.abs(-10));//絕對值
System.out.println(Math.round(10.1));//10四捨五入
System.out.println(Math.round(10.8));//11
System.out.println(Math.round(-10.1));//-10
System.out.println(Math.round(-10.8));//-11
System.out.println(Math.ceil(10.1));//11向上取整
System.out.println(Math.ceil(10.8));//11
System.out.println(Math.ceil(-10.1));//-10
System.out.println(Math.ceil(-10.8));//-10
System.out.println(Math.floor(10.1));//10向下取整
System.out.println(Math.floor(10.8));//10
System.out.println(Math.floor(-10.1));//-11
System.out.println(Math.floor(-10.8));//-11
System.out.println(Math.max(10.1, 20.2));//20.2取最大值
System.out.println(Math.pow(2, 8));//public static double pow(double a,double b) //a的b次方
System.out.println(Math.random());// 0.1之間隨機小數 包含0 不包含1
}
}
基本型別包裝類:Java中提供了相應的物件來解決字串與基本資料之間的轉換問題。基本資料型別物件包裝類:java將基本資料型別值封裝成了物件。
位元組型 | 短整型 | 整型 | 長整型 | 字元型 | 布林型 | 浮點型 | 浮點型 | |
---|---|---|---|---|---|---|---|---|
基本資料型別 | byte | short | int | long | char | boolean | float | double |
包裝類 | Byte | Short | Integer | Long | Character | Boolean | Float | Double |
☆常見方法: 字串→基本型別:public static byte parseByte(String s) //將字串解析為有符號的十進位制byte public static short parseShort(String s) //將字串解析為有符號的十進位制short public static int parseInt(String s)//將字串解析為有符號的十進位制int public static long parseLong(String s)//將字串解析為有符號的十進位制long public static float parseFloat(String s)//返回一個被字串初始化的float值 public static double parseDouble(String s)//返回一個被字串初始化的double值 public static boolean parseBoolean(String s)//將字串解析為boolean 如果字串無法轉成基本型別,將會發生數字轉換的問題 NumberFormatException
基本型別→字串:基本型別轉為字串非常簡單,直接與空字串相加即可。
☆自動裝箱拆箱:基本資料型別包裝類這些引用資料型別與其他引用資料型別有些不同,他們有更強大的功能,即自動裝箱拆箱。在需要的情況下,基本型別與包裝型別可以通用。有些時候我們必須使用引用資料型別時,可以傳入基本資料型別。
public class Demo {
public static void main(String[] args) {
String s = "123";
int i = Integer.parseInt(s);//將字串解析為有符號的十進位制int
String ss = i+"";
System.out.println(ss);
Integer in1 = new Integer(10);
Integer in2 = new Integer(20);
System.out.println(in1- in2);//計算時自動拆箱
ArrayList<Integer> list = new ArrayList<>();
list.add(10);//自動裝箱
int i2 = list.get(0);//自動拆箱
Integer aa = 10; //10這個基本型別值自動裝箱成了引用型別
int bb = new Integer("10"); //引用資料型別自動拆箱成了基本型別
Integer c = bb + aa; //計算時,a自動拆箱為基本型別,結果自動裝箱成引用型別。
}
}
簡單正則表示式:正則表示式(英語:Regular Expression,在程式碼中常簡寫為regex)。正則表示式是一個字串,使用單個字串來描述、用來定義匹配規則,匹配一系列符合某個句法規則的字串。在開發中,正則表示式通常被用來檢索、替換那些符合某個規則的文字。 ☆正則表示式的匹配規則:
類別 | 具體 | 含義 | 舉例 |
---|---|---|---|
字元 | x | 代表的是字元x | 匹配規則為 “a”,那麼需要匹配的字串內容就是 ”a” |
字元 | \ | 代表的是斜線字元’’ | 匹配規則為"\" ,那麼需要匹配的字串內容就是 ”\” |
字元 | \t | 代表的是製表符 | 匹配規則為"\t" ,那麼對應的效果就是產生一個製表符的空間 |
字元 | \n | 代表的是換行符 | 匹配規則為"\n",那麼對應的效果就是換行,游標在原有位置的下一行 |
字元 | \r | 代表的是回車符 | 匹配規則為"\r" ,那麼對應的效果就是回車後的效果,游標來到下一行行首 |
字元類 | [abc] | 代表的是字元a、b 或 c | 匹配規則為"[abc]" ,那麼需要匹配的內容就是字元a,或者字元b,或字元c的一個 |
字元類 | [^abc] | 代表的是除了 a、b 或 c以外的任何字元 | 匹配規則為"[^abc]",那麼需要匹配的內容就是不是字元a,b,c的任意一個字元 |
字元類 | [a-zA-Z] | 代表的是a 到 z 或 A 到 Z,兩頭的字母包括在內 | 匹配規則為"[a-zA-Z]",那麼需要匹配的是一個大寫或者小寫字母 |
字元類 | [0-9] | 代表的是 0到9數字,兩頭的數字包括在內 | 匹配規則為"[0-9]",那麼需要匹配的是一個數字 |
字元類 | [a-zA-Z_0-9] | 代表的字母或者數字或者下劃線(即單詞字元) | 匹配規則為" [a-zA-Z_0-9] ",那麼需要匹配的是一個字母或者是一個數字或一個下劃線 |
預定義字元類 | . | 代表的是任何字元 | 匹配規則為" . “,那麼需要匹配的是一個任意字元。如果,就想使用 . 的話,使用匹配規則”\."來實現 |
預定義字元類 | \d | 代表的是 0到9數字,兩頭的數字包括在內,相當於[0-9] | 匹配規則為"\d ",那麼需要匹配的是一個數字 |
預定義字元類 | \w | 代表的字母或者數字或者下劃線(即單詞字元),相當於[a-zA-Z_0-9] | 匹配規則為"\w ",,那麼需要匹配的是一個字母或者是一個數字或一個下滑線 |
邊界匹配器 | ^ | 代表的是行的開頭 | 匹配規則為^[abc][0-9]$ ,那麼需要匹配的內容從[abc]這個位置開始, 相當於左雙引號 |
邊界匹配器 | $ | 代表的是行的結尾 | 匹配規則為^[abc][0-9]$ ,那麼需要匹配的內容以[0-9]這個結束, 相當於右雙引號 |
邊界匹配器 | \b | 代表的是單詞邊界 | 匹配規則為"\b[abc]\b" ,那麼代表的是字母a或b或c的左右兩邊需要的是非單詞字元([a-zA-Z_0-9]) |
數量詞 | X? | 代表的是X出現一次或一次也沒有 | 匹配規則為"a?",那麼需要匹配的內容是一個字元a,或者一個a都沒有 |
數量詞 | X* | 代表的是X出現零次或多次 | 匹配規則為"a*" ,那麼需要匹配的內容是多個字元a,或者一個a都沒有 |
數量詞 | X+ | 代表的是X出現一次或多次 | 匹配規則為"a+",那麼需要匹配的內容是多個字元a,或者一個a |
數量詞 | X{n} | 代表的是X出現恰好 n 次 | 匹配規則為"a{5}",那麼需要匹配的內容是5個字元a |
數量詞 | X{n,} | 代表的是X出現至少 n 次 | 匹配規則為"a{5, }",那麼需要匹配的內容是最少有5個字元a |
數量詞 | X{n,m} | 代表的是X出現至少 n 次,但是不超過 m 次 | 匹配規則為"a{5,8}",那麼需要匹配的內容是有5個字元a 到 8個字元a之間 |
邏輯運算子 | XY | 代表的是X後跟Y | 匹配規則為"ab",那麼需要匹配的字串內容就是 ”ab” |
邏輯運算子 | XY | 代表的是X後跟Y | 匹配規則為"ab",那麼需要匹配的字串內容就是 ”ab” |
邏輯運算子 | X|Y | 代表的是X 或 Y | 匹配規則為"a |
String類中,使用正則表示式匹配完整字串的方法為: public boolean matches(String regex) 呼叫方法的字串為被規則匹配的字串,regex字串為匹配規則,返回值為布林型,符合規則返回true,不符合返回false
public class Demo {
public static void main(String[] args) {
String data = "[email protected]";
boolean result = data.matches("\\[email protected]\\w{2,7}\\.\\w{2,3}");//郵箱規則:String regex = "\\[email protected]\\w{2,7}\\.\\w{2,3}";
System.out.println(result);//返回結果為true
String data2 = “itheima.cn”;
boolean result2 = data2.matches("\\[email protected]\\w{2,7}\\.\\w{2,3}"); //返回結果為false
String number="1356757888";//手機號規則:String regex = "[1][3,4,5,7,8][0-9]{9}";
boolean result3 = number.matches("[1][3,4,5,7,8][0-9]{9}");//返回結果為true
}
public String[] split(String regex) //將符合規則的字串作為切割符切割 public String replaceAll(String regex,String replacement) //將符合規則的字串替換為新字串
public class Demo {
public static void main(String[] args) {
String girlName = "姍姍.慧慧.柳柳.蓮蓮.糖糖 ";
String[] girlNames = girlName.split("\\.");
for (int i = 0; i < girlNames.length; i++) {
String string = girlNames[i];
System.out.println(string);
}
String replaceAll = girlName.replaceAll("柳", "巖巖");
System.out.println(replaceAll);
}
}