核心概述:本篇我們將會學(xué)習(xí)常用的API隐圾,其中有Object類、日期相關(guān)操作類掰茶、數(shù)組相關(guān)操作類Arrays暇藏、正則表達(dá)式;同時也會學(xué)習(xí)關(guān)于數(shù)組的一些常用算法符匾,其他中有冒泡排序叨咖、二分查找法。
第一章:Object類
1.1-概述(了解)
java.lang.Object
類是Java語言中的根類啊胶,每個類都使用 Object
作為超類甸各。所有對象(包括數(shù)組)都實現(xiàn)這個類的方法。
如果一個類沒有特別指定父類焰坪, 那么默認(rèn)則繼承自O(shè)bject類趣倾。例如:
public class MyClass /*extends Object*/ {
// ...
}
1.2-本地方法(了解)
在Object類的源碼中定義了native
修飾的方法,native
修飾的方法稱為本地方法某饰。
本地方法的特點:
- 被native修飾的方法儒恋,非Java語言編寫,是由C++語言編寫黔漂。
- 本地方法在運行時期進(jìn)入本地方法棧內(nèi)存诫尽,本地方法棧是一塊獨立內(nèi)存的區(qū)域。
- 本地方法的意義是和操作系統(tǒng)進(jìn)行交互炬守。
如Object類中部分源碼:
private static native void registerNatives();
static {
registerNatives();
}
當(dāng)程序運行的時候牧嫉,Object類會最先被加載到內(nèi)存中。類進(jìn)入內(nèi)存后首先加載自己的靜態(tài)成員,static代碼塊中調(diào)用了本地方法registerNatives()
酣藻,和操作系統(tǒng)進(jìn)行交互曹洽。
查看Object類源碼:在IDEA編輯器中,新建一個類辽剧,在類中一個main方法中new Object()
送淆,鼠標(biāo)停留在Object
類上,按住ctrl
+ 點擊鼠標(biāo)怕轿,進(jìn)入Object類源碼中偷崩。
1.3-toString方法(理解)
認(rèn)識toString方法
方法聲明:public String toString()
:返回該對象的字符串表示。
Object類toString()方法源碼:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
源碼分析:
-
getClass().getName()
返回類的全限定名字撤卢。 -
hashCode()
方法返回int值环凿,可以暫時理解為對象的內(nèi)存地址。 -
Integer.toHexString()
將int類型的值轉(zhuǎn)成十六進(jìn)制放吩。 - 因此調(diào)用對象的toString()方法將看到內(nèi)存的地址值智听。
創(chuàng)建Person類,并調(diào)用方法toString()
public static void main(String[] args){
Student stu = new Student();
String str = stu.toString();
System.out.println(str); // www.penglei666.com.demo01.Student@5f2050f6
System.out.println(stu); // www.penglei666.com.demo01.Student@5f2050f6
}
通過程序運行渡紫,得到結(jié)論到推,在輸出語句中打印對象,就是在調(diào)用對象的toString()方法惕澎。
重寫toString方法
由于toString方法返回的結(jié)果是內(nèi)存地址莉测,而在開發(fā)中,內(nèi)存地址并沒有實際的應(yīng)用價值唧喉,經(jīng)常需要按照對象的屬性得到相應(yīng)的字符串表現(xiàn)形式捣卤,因此也需要重寫它。
public class Student {
private String name;
private int age;
@Override
public String toString() {
return "Student:" + name + "," + age;
}
// 省略構(gòu)造器與Getter Setter
}
1.4-equals方法(理解)
認(rèn)識equals方法
方法聲明:public boolean equals(Object obj)
:指示其他某個對象是否與此對象“相等”八孝。
Object類equals()方法源碼:
public boolean equals(Object obj) {
return (this == obj);
}
源碼分析:
- this是當(dāng)前對象董朝,哪個對象調(diào)用的equals方法就表示哪個對象。
- obj表述傳遞的參數(shù)干跛,參數(shù)類型Object子姜,可以傳遞任意類型對象。
- this==obj 比較兩個對象的內(nèi)存地址是否相同
equals方法默認(rèn)比較兩個對象的內(nèi)存地址是否相同楼入,相同則返回true哥捕。
重寫equals方法
實際應(yīng)用中,比較內(nèi)存地址是否相同并沒有意義嘉熊,我們可以定義對象自己的比較方式遥赚,比較對象中成員變量的值是否相同。需要對方法進(jìn)行重寫阐肤。
需求:重寫equals()方法鸽捻,比較兩個對象中姓名和年齡是否相同,如果姓名和年齡都相同返回true,否則返回false御蒲。
public class Person {
private String name;
private int age;
public boolean equals(Object obj){
//判斷兩個對象地址弱相同,即為同一個對象
if(this == obj)
return true;
//obj對象為空诊赊,無需比較厚满,返回false
if(obj == null)
return false;
//obj如果是Person類型對象,則強(qiáng)制轉(zhuǎn)換
if(obj instanceof Person){
Person person = (Person)obj;
//比較兩個對象的name屬性和age屬性碧磅,如果相等碘箍,返回true
return this.name.equals(person.name) && this.age == person.age;
}
return false;
}
}
第二章:日期操作類
2.1-Date類(記憶)
構(gòu)造方法
-
public Date()
:從運行程序的此時此刻到時間原點經(jīng)歷的毫秒值,轉(zhuǎn)換成Date對象,分配Date對象并初始化此對象鲸郊,以表示分配它的時間(精確到毫秒)丰榴。 -
public Date(long date)
:將指定參數(shù)的毫秒值date,轉(zhuǎn)換成Date對象,分配Date對象并初始化此對象秆撮,以表示自從標(biāo)準(zhǔn)基準(zhǔn)時間(稱為“歷元(epoch)”四濒,即1970年1月1日00:00:00 GMT)以來的指定毫秒數(shù)。
public class Test01 {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date); // Fri Jul 31 11:59:20 CST 2020
Date date2 = new Date(0);
System.out.println(date2); // Thu Jan 01 08:00:00 CST 1970
}
}
常用方法
-
public long getTime()
把日期對象轉(zhuǎn)換成對應(yīng)的時間毫秒值职辨。 -
public void setTime(long time)
把方法參數(shù)給定的毫秒值設(shè)置給日期對象盗蟆。
public class Test02 {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date.getTime()); // 1596168137169
date.setTime(15961681371611L);
System.out.println(date); // Tue Oct 22 00:22:51 CST 2475
}
}
毫秒值(時間戳)和日期對象互相轉(zhuǎn)換
日期對象轉(zhuǎn)換為毫秒值:日期對象.getTime()
;
毫秒值轉(zhuǎn)換為日期對象:new Date(long time)
;
獲取當(dāng)前時間的毫秒值:System.currentTimeMillis()
public class Test02 {
public static void main(String[] args) {
// 從1970年到現(xiàn)在的總毫秒值(也叫時間戳)
long millis = System.currentTimeMillis();
System.out.println(millis); // 1596168719242
// 毫秒值轉(zhuǎn)日期對象
Date date = new Date(millis);
System.out.println(date); // Fri Jul 31 12:11:59 CST 2020
// 日期對象轉(zhuǎn)毫秒值
long millis2 = date.getTime();
System.out.println(millis2); // 1596168719242
}
}
2.2-DateFormat類(記憶)
概述
java.text.DateFormat
是日期/時間格式化子類的抽象類,我們通過這個類可以幫我們完成日期和文本之間的轉(zhuǎn)換,也就是可以在Date對象與String對象之間進(jìn)行來回轉(zhuǎn)換舒裤。
- 格式化:按照指定的格式喳资,把Date對象轉(zhuǎn)換為String對象。
- 解析:按照指定的格式腾供,把String對象轉(zhuǎn)換為Date對象
構(gòu)造方法
由于DateFormat為抽象類仆邓,不能直接使用,所以需要常用的子類java.text.SimpleDateFormat
伴鳖。這個類需要一個模式(格式)來指定格式化或解析的標(biāo)準(zhǔn)节值。構(gòu)造方法為:
-
public SimpleDateFormat(String pattern)
:用給定的模式和默認(rèn)語言環(huán)境的日期格式符號構(gòu)造SimpleDateFormat。
參數(shù)pattern是一個字符串黎侈,代表日期時間的自定義格式察署。
常用的格式規(guī)則為:
標(biāo)識字母(區(qū)分大小寫) | 含義 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 時 |
m | 分 |
s | 秒 |
備注:更詳細(xì)的格式規(guī)則,可以參考SimpleDateFormat類的API文檔峻汉。
轉(zhuǎn)換方法
-
String format(Date date)
傳遞日期對象贴汪,返回格式化后的字符串。 -
Date parse(String str)
傳遞字符串休吠,返回日期對象扳埂。
public static void main(String[] args) throws ParseException {
// 創(chuàng)建當(dāng)前日期對象
Date date = new Date();
// 創(chuàng)建格式化對象
DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String dateStr = format.format(date);
System.out.println(dateStr); // 2019-12-07 05:37:53
// 把格式化日期轉(zhuǎn)換為日期對象
Date date2 = format.parse("2100-12-12 12:12:12");
System.out.println(date2); // Sun Dec 12 00:12:12 CST 2100
}
2.3-Calendar類(記憶)
概述
java.util.Calendar
是日歷類,在Date后出現(xiàn)瘤礁,替換掉了許多Date的方法阳懂。該類將所有可能用到的時間信息封裝為靜態(tài)成員變量,方便獲取。日歷類就是方便獲取各個時間屬性的岩调。
獲取日歷對象
Calendar是抽象類巷燥,不能創(chuàng)建對象,需要使用子類對象号枕。java.util.GregorianCalendar
類是Calendar的子類缰揪,但是創(chuàng)建日歷對象需要根據(jù)本地的時區(qū),語言環(huán)境來創(chuàng)建葱淳,比較困難钝腺,Calendar類提供了靜態(tài)方法 getInstance()直接獲取子類的對象。
public static Calendar getInstance()
:使用默認(rèn)時區(qū)和語言環(huán)境獲得一個日歷赞厕。
public static void main(String[] args) {
// 獲取日歷對象
Calendar calendar = Calendar.getInstance();
}
常用方法
常用方法
-
public int get(int field)
:返回給定日歷字段的值艳狐。 -
public void set(int field, int value)
:將給定的日歷字段設(shè)置為給定值。 -
public abstract void add(int field, int amount)
:根據(jù)日歷的規(guī)則皿桑,為給定的日歷字段添加或減去指定的時間量毫目。 -
public Date getTime()
:返回一個表示此Calendar時間值(從歷元到現(xiàn)在的毫秒偏移量)的Date對象。
field:Calendar類中提供很多成員常量唁毒,代表給定的日歷字段:
字段值 | 含義 |
---|---|
YEAR | 年 |
MONTH | 月(從0開始蒜茴,可以+1使用) |
DAY_OF_MONTH | 月中的天(幾號) |
HOUR | 時(12小時制) |
HOUR_OF_DAY | 時(24小時制) |
MINUTE | 分 |
SECOND | 秒 |
DAY_OF_WEEK | 周中的天(周幾,周日為1浆西,可以-1使用) |
代碼:
public static void main(String[] args) {
// 獲取日歷對象
Calendar calendar = Calendar.getInstance();
// 獲取當(dāng)前日期的部分?jǐn)?shù)據(jù)
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH)); // 月份 0-11
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
System.out.println(calendar.get(Calendar.MINUTE));
System.out.println(calendar.get(Calendar.SECOND));
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
}
練習(xí)
需求:獲取任意一年的二月有多少天
分析:
- 可以將日歷設(shè)置到任意年的三月一日
- 向前偏移一天
- 獲取偏移后的日歷即可
代碼:
public static void main(String[] args) {
//鍵盤錄入任意的年份
Scanner sc = new Scanner(System.in);
System.out.println("請輸入年:");
int year = sc.nextInt();
//設(shè)置日歷對象的年粉私、月、日
Calendar c = Calendar.getInstance();
c.set(year, 2, 1);
//3月1日往前推一天近零,就是2月的最后一天
c.add(Calendar.DATE, -1);
//獲取這一天輸出即可
int date = c.get(Calendar.DATE);
System.out.println(year + "年的2月份有" + date + "天");
第三章:System類
3.1-概述(了解)
java.lang.System
類中提供了大量的靜態(tài)方法诺核,可以獲取與系統(tǒng)相關(guān)的信息或系統(tǒng)級操作。System類私有修飾構(gòu)造方法久信,不能創(chuàng)建對象窖杀,直接類名調(diào)用。
3.2-常用方法(記憶)
3.3-測試程序運行時長(練習(xí))
需求:在控制臺輸出1-10000裙士,計算這段代碼執(zhí)行了多少毫秒
public static void main(String[] args) {
//獲取當(dāng)前時間毫秒值
System.out.println(System.currentTimeMillis());
// 計算程序運行時間
long start = System.currentTimeMillis();
for (int i = 1; i <= 10000; i++) {
System.out.println(i);
}
long end = System.currentTimeMillis();
System.out.println("共耗時毫秒:" + (end - start));
}
3.4-arryCopy方法(記憶)
參數(shù)
- Object src:要復(fù)制的數(shù)據(jù)源數(shù)組
- int srcPost:數(shù)據(jù)源數(shù)組的開始索引
- Object dest:復(fù)制后的目的數(shù)組
- int destPos:目的數(shù)組開始索引
- int length:要復(fù)制的數(shù)組元素的個數(shù)
代碼
將源數(shù)組中從1索引開始入客,復(fù)制3個元素到目的數(shù)組中
public static void main(String[] args){
int[] src = {1,2,3,4,5};
int[] dest = {6,7,8,9,0};
//將源數(shù)組中從1索引開始,復(fù)制3個元素到目的數(shù)組中
System.arraycopy(src,1,dest,0,3);
for(int i = 0 ; i < dest.length;i++){
System.out.println(dest[i]);
}
3.5-gc方法(了解)
運行垃圾回收器腿椎,JVM將從堆內(nèi)存中清理對象桌硫,清理對象的同時會調(diào)用對象的finalize()方法,JVM的垃圾回收器是通過另一個線程開啟的啃炸,因此程序中的效果并不明顯铆隘。
Person類
public class Person {
protected void finalize() throws Throwable {
System.out.println("對象被回收");
}
測試類:
public static void main(String[] args){
new Person();
new Person();
new Person();
new Person();
new Person();
new Person();
System.gc();
}
第四章:數(shù)組的冒泡排序
數(shù)組的排序,是將數(shù)組中的元素按照大小進(jìn)行排序南用,默認(rèn)都是以升序的形式進(jìn)行排序膀钠,數(shù)組排序的方法很多掏湾,我們講解的是數(shù)組的冒泡排序。
排序肿嘲,都要進(jìn)行數(shù)組 元素大小的比較融击,再進(jìn)行位置的交換。冒泡排序法是采用數(shù)組中相鄰元素進(jìn)行比較換位雳窟。
4.1-什么是冒泡排序(了解)
冒泡排序(Bubble Sort)砚嘴,是一種較簡單的排序算法。
它重復(fù)地走訪過要排序的元素列涩拙,依次比較兩個相鄰的元素,如果順序錯誤就把他們交換過來耸采。走訪元素的工作是重復(fù)地進(jìn)行直到?jīng)]有相鄰元素需要交換兴泥,也就是說該元素列已經(jīng)排序完成。
這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢“浮”到數(shù)列的頂端(升序或降序排列)虾宇,就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣搓彻,故名“冒泡排序”。
實 質(zhì):把兄鲂唷(大)的元素往前(后)調(diào)
4.2-冒泡排序的分析和實現(xiàn)(練習(xí))
需求
對數(shù)組 { 3, 6, 4, 2, 1, 5 }
進(jìn)行從小到大的排序旭贬。
該數(shù)組共6個元素。
圖解冒泡算法解析過程
代碼實現(xiàn)
經(jīng)上述圖解分析:代碼實現(xiàn)需要
- 雙重循環(huán)
- 外層循環(huán)搪泳,控制躺數(shù)(躺數(shù)從0開始稀轨,因為數(shù)組索引從0開始,比較好計算)岸军。
躺數(shù) = 數(shù)組長度 - 1
- 內(nèi)層循環(huán)奋刽,控制每趟比較的次數(shù)。
每趟比較的次數(shù) = 數(shù)組的長度 - 當(dāng)前躺數(shù) - 1
- 外層循環(huán)搪泳,控制躺數(shù)(躺數(shù)從0開始稀轨,因為數(shù)組索引從0開始,比較好計算)岸军。
- 比較相鄰的兩個數(shù)字艰赞,若位置錯誤佣谐,則兩個數(shù)字交換
public class Test06 {
public static void main(String[] args) {
// 定義要排序的數(shù)組
int[] arr = {3, 6, 4, 2, 1, 5};
System.out.println("數(shù)組排序前:" + showArray(arr));
/**
* 冒泡排序
*/
for (int i = 0; i < arr.length - 1; i++) {
// 外層循環(huán)控制躺數(shù)
// i表示當(dāng)前躺數(shù)
for (int j = 0; j < arr.length - i - 1; j++) {
// 內(nèi)層循環(huán)控制每趟比較的次數(shù)
// 相鄰的兩個數(shù)字開始比較:arr[j] 和 arr[j+1]
if (arr[j] > arr[j + 1]) {
// 位置錯誤發(fā)生交換
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println("數(shù)組排序后:" + showArray(arr));
}
/**
* 查看數(shù)組
*/
public static String showArray(int[]arr) {
StringBuilder sb = new StringBuilder();
sb.append("{ ");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
sb.append(arr[i]);
} else {
sb.append(arr[i] + ", ");
}
}
sb.append(" }");
return sb.toString();
}
}
執(zhí)行結(jié)果:
/*
數(shù)組排序前:{ 3, 6, 4, 2, 1, 5 }
數(shù)組排序后:{ 1, 2, 3, 4, 5, 6 }
*/
第五章:數(shù)組的二分查找
目的:從數(shù)組中查詢一個元素,比較高效的查詢方式方妖,就是二分查找狭魂。
5.1-什么是二分查找(了解)
二分查找也稱折半查找(Binary Search),它是一種效率較高的查找方法党觅,但是雌澄,折半查找要求查詢的數(shù)組的元素是有序排列的。
查找過程如下:
首先仔役,假設(shè)數(shù)組中的元素是按升序排列掷伙;
將數(shù)組中間位置記錄的元素值與要查找的元素值比較,如果兩者相等又兵,則查找成功任柜;
否則利用中間位置的記錄將數(shù)組分成前卒废、后兩個子數(shù)組;
如果中間位置記錄的元素值大于要查找元素值宙地,則進(jìn)一步查找前一子數(shù)組摔认,否則進(jìn)一步查找后一子數(shù)組。
重復(fù)以上過程宅粥,直到找到滿足條件的記錄参袱,使查找成功,或直到子表不存在為止秽梅,此時查找不成功抹蚀。
5.2-二分查找的分析和實現(xiàn)(練習(xí))
需求:
從數(shù)組{ 2, 5, 9, 10, 18, 20, 24 }
中分別查詢出元素5
、20
企垦、3
折半查找环壤,不能簡單的除以2,需要確認(rèn)最小索引和最大索引钞诡。因為可能會多次折半(一次 折半可能查找不成功)郑现,索引最小索引和最大索引可能會變化。所以需要確定以下變量:
最小索引:min = 0
最大索引:max = 數(shù)組的長度 - 1
中間索引:(max + min)/2
圖解分析
圖解分析查詢元素5的過程:
圖解分析查詢元素20的過程:
圖解分析查詢元素3(一個不存在的元素)的過程:
結(jié)論
對于要查詢的元素:
- 折半次數(shù)不確定(可能是多次)荧降,使用while循環(huán)更簡便接箫。
- 折半過程中,若查詢的值小于mid位置的值朵诫,則更改索引max為:max = mid - 1
- 折半過程中辛友,若查詢的值大于mid位置的值,則更改索引min為:min = mid + 1
- 查詢成功拗窃,要查詢的元素 和 mid值相等時瞎领,終止查詢。
- 元素中不存在該元素随夸,條件是索引min大于索引max時九默,終止查詢。
代碼
public class Test06 {
public static void main(String[] args) {
// 定義數(shù)組
int[]arr = { 2, 5, 9, 10, 18, 20, 24 };
// 查詢元素5
int index1 = binarySearch(arr,5);
System.out.println("從數(shù)組:{ 2, 5, 9, 10, 18, 20, 24 }查詢元素5的索引是:" + index1);
// 查詢元素20
int index2 = binarySearch(arr,20);
System.out.println("從數(shù)組:{ 2, 5, 9, 10, 18, 20, 24 }查詢元素20的索引是:" + index2);
// 查詢元素3
int index3 = binarySearch(arr,3);
System.out.println("從數(shù)組:{ 2, 5, 9, 10, 18, 20, 24 }查詢元素3的索引是:" + index3);
}
/**
* 二分查找,返回要查找的元素的索引
* @param arr 數(shù)組
* @param key 要查詢的元素值
* @return 查詢的結(jié)果宾毒,-1表示不存在該元素
*/
public static int binarySearch(int[]arr, int key) {
// 最小索引初始化為0
int min = 0;
// 最大索引初始化為數(shù)組的長度 -1
int max = arr.length - 1;
// 中間索引
int mid = 0;
// 定義查詢后的元素的索引驼修,默認(rèn)為-1,表示不存在該元素
int index = -1;
// 循環(huán)查詢
while (min <= max){
mid = (max + min)/2;
if(key > arr[mid]) {
min = mid + 1;
}else if(key < arr[mid]){
max = mid - 1;
}else {
index = mid;
break;
}
}
return index;
}
}
查詢結(jié)果:
/*
從數(shù)組:{ 2, 5, 9, 10, 18, 20, 24 }查詢元素5的索引是:1
從數(shù)組:{ 2, 5, 9, 10, 18, 20, 24 }查詢元素20的索引是:5
從數(shù)組:{ 2, 5, 9, 10, 18, 20, 24 }查詢元素3的索引是:-1
*/
第六章:Arrays類
我們發(fā)現(xiàn)操作數(shù)組時诈铛,不論是排序乙各、二分查找等,每次實現(xiàn)都需要自己分析寫代碼幢竹。在開發(fā)過程中耳峦,影響開發(fā)效率。所以Java中提供了操作數(shù)組的工具類Arrays焕毫。
6.1-概述(了解)
java.util.Arrays
此類包含用來操作數(shù)組的各種方法蹲坷,比如排序和搜索等驶乾。Arrays類私有修飾構(gòu)造方法,其所有方法均為靜態(tài)方法循签,調(diào)用起來非常簡單级乐。
6.2-常用方法(記憶)
了解更多方法可查詢API
public static void main(String[] args) {
// 定義數(shù)組
int[]arr = { 2, 9, 5, 10, 24, 20, 18 };
// 排序
Arrays.sort(arr);
// 排序后的數(shù)組
System.out.println(Arrays.toString(arr));
// 二分查找元素5的索引
System.out.println(Arrays.binarySearch(arr,5));
// 二分查找元素20的索引
System.out.println(Arrays.binarySearch(arr,20));
// 二分查找元素3的索引
System.out.println(Arrays.binarySearch(arr,3));
}
第七章:正則表達(dá)式
在實際開發(fā)中,我們經(jīng)常會對一些字符串做驗證县匠,比如驗證郵箱格式风科、手機(jī)號碼、身份證號碼等乞旦。此時贼穆,最有效的驗證方式就是正則表達(dá)式,只需要用正則描述驗證規(guī)則兰粉,然后直接匹配字符串即可扮惦。
7.1-概述(了解)
正則表達(dá)式是對字符串操作的一種規(guī)則,事先定義好一些字符串亲桦,這些字符串稱為規(guī)則字符串,使用規(guī)則字符串表達(dá)一些邏輯功能浊仆。
例如:指定一個字符串704181501@qq.com客峭,判斷出這個字符串是否符合電子郵件的規(guī)則。使用字符串String對象的方法是可以完成的抡柿,但是非常復(fù)雜舔琅,若使用正則表達(dá)式則會非常的簡單實現(xiàn)。
7.2-正則規(guī)則-字符類(記憶)
在中括號中定義的字符
7.3-正則規(guī)則-預(yù)定義字符類(記憶)
預(yù)定義字符洲劣,具有特殊含義的字符备蚓。
注意:對于\w、\d囱稽、\W郊尝、\D 在java中表示時用雙杠如\\w
表示,因為\在java的字符串中表示轉(zhuǎn)義战惊。
7.4-正則規(guī)則-數(shù)量詞(記憶)
7.5-正則規(guī)則-分組(記憶)
分組流昏,就是將多個字符看做一個整體,用小括號表示吞获。
比如:"(李){4}" 表示字符“李”必須出現(xiàn)四次
比如:"(李小龍){4}" 表示字符"李小龍"必須連續(xù)出現(xiàn)四次
7.6-正則規(guī)則-轉(zhuǎn)義符(記憶)
對于况凉,具有特殊含義的字符若表示為普通字符,可以使用轉(zhuǎn)義符\
,如.
就在正則中表示任意字符各拷,但若就是表示為普通的點的話刁绒,則需要轉(zhuǎn)義\.
java字符串中表示用\\.
。
7.5-Java中使用正則表達(dá)式(練習(xí))
String類matches方法使用正則表達(dá)式
方法:boolean matches(String regex)
傳遞正則表達(dá)式規(guī)則烤黍,檢測字符串是否匹配正則表達(dá)式規(guī)則知市,匹配返回true傻盟。
需求:檢查手機(jī)號,檢查郵件地址初狰。
分析:
- 手機(jī)號:只能1開頭莫杈,第二位可以是345678任意一個,第三位開始全數(shù)字奢入,總長11位筝闹。
- 郵件地址:@前面可以是數(shù)字,字母腥光,下劃線关顷。@后面是字母和.。
public static void main(String[] args){
//【驗證手機(jī)號碼】
String tel = "13800138000";
// 規(guī)則
String telRegex = "1[345678][0-9]{9}";
// 檢測
boolean flag = tel.matches(telRegex);
System.out.println(flag);
//【驗證郵件地址】
String email = "lpl2015@vip.qq.com";
String emailReg = "\\w+@(\\w+\\.)+\\w+";
flag = email.matches(emailReg);
System.out.println(flag);
}
String類split方法使用正則表達(dá)式
方法:String[] split(String regex)
傳遞正則表達(dá)式規(guī)則武福,以正則規(guī)則對字符串進(jìn)行切割议双,返回數(shù)組。
public static void main(String[] args){
String str1 = "ab a bbb abc aa c";
//對空格進(jìn)行切割
String[] strArr =str1.split(" +");
System.out.println(Arrays.toString(strArr));
String str2 = "192.168.1.121";
strArr = str2.split("\\.");
System.out.println(Arrays.toString(strArr));
}
注意:輸出數(shù)組元素時會看到存在一個多余空格捉片,Arrays.toString()方法源碼中追加的空格平痰。