Java之XML、正則表示式
第一章 XML
知識點 - 1.1 XML介紹
目標
- 瞭解xml的概述和作用
路徑
- 什麼是XML
- XML 與 HTML 的主要差異
- XML的作用
講解
1.1 什麼是XML
-
XML 指可擴充套件標記語言(EXtensibleMarkupLanguage)
-
XML是用來傳輸資料的,不是用來顯示資料的。之後學習另外一個HTML是用來顯示資料的。
-
XML 標籤沒有被預定義。您需要自行定義標籤。
-
XML 是W3C 的推薦標準
W3C在1988年2月釋出1.0版本,2004年2月又釋出1.1版本,但因為1.1版本不能向下相容1.0版本,所以1.1沒有人用。同時,在2004年2月W3C又釋出了1.0版本的第三版。我們要學習的還是1.0版本。
1.2 XML 與 HTML 的主要差異
- html語法鬆散,xml語法嚴格,區分大小寫
- html做頁面展示,xml傳輸資料
- html所有標籤都是預定義的,xml所有標籤都是自定義的
1.3 xml的作用
-
作為配置檔案。 javaee框架 ssm大部分都會使用xml作為配置檔案
-
XML可以儲存資料 , 作為資料交換的載體(使用XML格式進行資料的傳輸)。
小結
- xml概述: W3C組織釋出的,xml中的所有標籤沒有預定義,標籤區分大小寫, 我們自己可以自定義標籤
- xml作用: 可以用來儲存資料,作為配置檔案
知識點 - 1.2 XML組成元素
目標
- 我們知道了XML是什麼, 接下來我們來了解一下XML它是由什麼組成的.
路徑
- XML的組成元素
講解
一個標準XML檔案一般由以下幾部分組成:文件宣告、元素、屬性、註釋、轉義字元、字元區。
文件宣告
<?xml version="1.0" encoding="utf-8" ?>
-
說明: 1.文件宣告可以沒有 2.文件宣告必須在第0行0列 3.文件宣告是以<?xml開頭,以?>結尾 4.文件宣告有2個屬性,version表示xml版本,encoding表示編碼
元素\標籤
-
元素是XML中最重要的組成部分,元素也叫標籤
-
標籤分為開始標籤和結束標籤,開始標籤<名字> 結束標籤</名字>
-
開始標籤和結束標籤中間寫的是標籤內容,標籤的內容可以是文字,也可以是其他標籤
-
如果標籤沒有任何內容,那麼可以定義空標籤(比如:<名字/>)
-
標籤可以巢狀,但是不能亂巢狀
-
一個XML檔案只有一個根標籤
-
命名規則:
不要使用XML xML xml 寫樣的單詞 不能使用空格,冒號
命名區分大小寫
數字不能開頭
<?xml version="1.0" encoding="UTF-8" ?> <person> <name>唐三</name> <age>年齡</age> <aaa/> </person>
屬性
-
位置: 屬性是元素的一部分,它必須出現在元素的開始標籤中,不能寫在結束標籤中
-
格式: 屬性的定義格式:屬性名=“屬性值”,其中屬性值必須使用單引或雙引號括起來
-
一個元素可以有0~N個屬性,但一個元素中不能出現同名屬性
-
屬性名不能使用空格 , 不要使用冒號等特殊字元,且必須以字母開頭
-
空標籤中也可以定義屬性
<?xml version="1.0" encoding="UTF-8" ?>
<person>
<name id = "001" level = '98'>唐三</name>
<age>10</age>
<aaa type = 'itheima' />
</person>
註釋
<!--註釋內容-->
- XML的註釋,既以
<!--
開始,-->
結束。 - 註釋不能巢狀
- idea上快捷鍵:
ctrl + /
轉義字元
因為有些特殊的字元在XML中是不會被識別的,所以在元素體或屬性值中想使用這些符號就必須使用轉義字元(也叫實體字元),例如:">"、"<"、"'"、"""、"&"。
注意:嚴格地講,在 XML 中僅有字元 "<"和"&" 是非法的。省略號、引號和大於號是合法的,但是把它們替換為實體引用是個好的習慣。
轉義字元應用示例:
<price> 蘋果的價格: price > 5 && price < 10</price>
字元區(瞭解)
-
CDATA 內部的所有東西都會被解析器忽略,當做文字
-
快捷鍵: CD
<![CDATA[
文字資料
]]>
<!--寫步驟 -->
<>
<!>
<![]>
<![CDATA]>
<![CDATA[ 文字 ]]>
<!-- 案例 -->
<price>
<![CDATA[
蘋果的價格: price > 5 && price < 10
]]>
</price>
知識點 - 1.3 XML檔案的約束-DTD約束(瞭解)
目標
- 能夠根據DTD約束正確書寫xml
路徑
- 概念
- 根據DTD約束正確書寫XML
講解
xml約束概述
- 在XML技術裡,可以編寫一個文件來約束一個XML文件的書寫規範,這稱之為XML約束。
- 約束文件定義了在XML中允許出現的元素(標籤)名稱、屬性及元素(標籤)出現的順序等等。
- 兩種約束:DTD約束(檔案字尾為dtd),Schema約束(檔案字尾為xsd)
- 注意: 約束不是我們要寫的東西,我們的工作是根據約束去寫XML
根據DTD約束寫XML
- DTD約束文件
<?xml version="1.0" encoding="UTF-8" ?>
<!--
複製內容如下到XML檔案中:
<!DOCTYPE 書架 SYSTEM "bookdtd.dtd">
-->
<!--
對元素的約束:
ELEMENT表示這是一個元素 書架表示根標籤 書是書架的子標籤 +數量詞,表示出現的次數,至少出現一次(大於等於1次)
-->
<!ELEMENT 書架 (書+)>
<!--書 這是一個標籤 書標籤中包含書名,作者,售價這些子標籤 ,表示子標籤出現的順序關係-->
<!ELEMENT 書 (書名,作者,售價)>
<!--書名 這是一個標籤 #PCDATA標籤型別 書名標籤中是文字-->
<!ELEMENT 書名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售價 (#PCDATA)>
<!--ATTLIST表示對屬性的約束 對書標籤的 id,編號,出版社,type屬性進行約束 -->
<!--屬性名為id 屬性的型別為ID(ID型別表示唯一,並且不能以數字開頭) #REQUIRED表示id屬性必須要有 -->
<!--屬性名為編號 屬性的型別為CDATA(文字) #IMPLIED表示編號屬性可有可無-->
<!--屬性名為出版社 屬性的型別為列舉型別(任選其一) "傳智播客" 預設值為傳智播客-->
<!-- 屬性名為type 屬性的型別為CDATA文字 #FIXED表示固定值為 "IT" -->
<!ATTLIST 書
id ID #REQUIRED
編號 CDATA #IMPLIED
出版社 (清華|北大|傳智播客) "傳智播客"
type CDATA #FIXED "IT"
>
-
XML
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE 書架 SYSTEM "bookdtd.dtd"> <書架> <書 id="a1" 編號="001" 出版社="清華" type="IT"> <書名>斗羅大陸</書名> <作者>唐家三少</作者> <售價>99.8</售價> </書> <書 id="a2"> <書名>java從入門到放棄</書名> <作者>無名氏</作者> <售價>9.8</售價> </書> </書架>
語法(瞭解)
文件宣告(瞭解)
-
內部DTD,在XML文件內部嵌入DTD,只對當前XML有效。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 根元素 [元素宣告]>><!--內部DTD-->
-
外部DTD—本地DTD,DTD文件在本地系統上,企業內部自己專案使用。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 根元素 SYSTEM "檔名"><!--外部本地DTD-->
-
外部DTD—公共DTD,DTD文件在網路上,一般都有框架提供 , 也是我們使用最多的.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 根元素 PUBLIC "DTD名稱" "DTD文件的URL"> 例如: <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
元素宣告(瞭解)
-
約束元素的巢狀層級
語法
<!ELEMENT 父標籤 (子標籤1,子標籤2,…)> 例如: <!ELEMENT books (book+)> <!--約束根元素是"books","books"子元素為"book",“+”為數量詞--> <!ELEMENT book (name,author,price)><!--約束"book"子元素依次為“name”、“author”、“price”,-->
-
約束元素體裡面的資料
語法
<!ELEMENT 標籤名字 標籤型別> 例如 <!ELEMENT name (#PCDATA)>
標籤型別: EMPTY(即空元素,例如<hr/>) ANY(任意型別) (#PCDATA) 字串資料
程式碼
<!ELEMENT name (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT price (#PCDATA)>
-
數量詞(掌握)
數量詞符號 含義 * 表示元素可以出現0到多個 + 表示元素可以出現至少1個 ? 表示元素可以是0或1個 , 表示元素需要按照順序顯示 | 表示元素需要選擇其中的某一個
屬性宣告(瞭解)
語法
<!ATTLIST 標籤名稱
屬性名稱1 屬性型別1 屬性說明1
屬性名稱2 屬性型別2 屬性說明2
…
>
例如
<!ATTLIST book bid ID #REQUIRED>
屬性型別
- CDATA :表示文字字串
- ID:表示屬性值唯一,不能以數字開頭
- ENUMERATED (DTD沒有此關鍵字):表示列舉,只能從列舉列表中任選其一,如(雞肉|牛肉|豬肉|魚肉)
屬性說明:
- REQUIRED:表示該屬性必須出現
- IMPLIED:表示該屬性可有可無
- FIXED:表示屬性的取值為一個固定值。語法:#FIXED "固定值"
屬性說明
程式碼
<!ATTLIST 書 <!--設定"書"元素的的屬性列表-->
id ID #REQUIRED <!--"id"屬性值為必須有-->
編號 CDATA #IMPLIED <!--"編號"屬性可有可無-->
出版社 (清華|北大|傳智播客) "傳智播客" <!--"出版社"屬性值是列舉值,預設為“傳智播客”-->
type CDATA #FIXED "IT" <!--"type"屬性為文字字串並且固定值為"IT"-->
>
案例
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE 購物籃 [
<!ELEMENT 購物籃 (肉+)>
<!ELEMENT 肉 EMPTY>
<!ATTLIST 肉 品種 ( 雞肉 | 牛肉 | 豬肉 | 魚肉 ) "雞肉">
]>
<購物籃>
<肉 品種="牛肉"></肉>
<肉 品種="牛肉"></肉>
<肉 品種="魚肉"></肉>
<肉/>
</購物籃>
知識點 - 1.4 schema約束(瞭解)
目標
- 能夠根據schema約束寫出xml文件
路徑
- 概念
- 根據schema約束寫出xml文件
講解
概念
schema和DTD一樣, 也是一種XML檔案的約束.
Schema 語言也可作為 XSD(XML Schema Definition)。
Schema約束的檔案的字尾名.xsd
Schema 功能更強大,資料型別約束更完善。
根據schema約束寫出xml文件
-
Schema約束文件:
<?xml version="1.0" encoding="UTF-8" ?> <!-- 傳智播客教學例項文件.將註釋中的以下內容複製到要編寫的xml的宣告下面 複製內容如下到XML檔案中: <書架 xmlns="http://www.itcast.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.itcast.cn bookSchema.xsd" > --> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.itcast.cn" elementFormDefault="qualified"> <!--element代表元素 元素名 叫 書架--> <xs:element name='書架'> <!--書架是一個複雜元素--> <xs:complexType> <!--sequence代表子元素要順序出現 unbounded代表子元素可以出現無數次--> <xs:sequence maxOccurs='unbounded'> <!--書架中的子元素叫 書--> <xs:element name='書'> <!--書也是一個複雜元素--> <xs:complexType> <!--書中的子元素是順序出現的--> <xs:sequence> <!--書名是書的子元素 書名是字串型別--> <xs:element name='書名' type='xs:string'/> <!--作者是書的子元素 作者是字串型別--> <xs:element name='作者' type='xs:string'/> <!--售價是書的子元素 售價是小數型別--> <xs:element name='售價' type='xs:double'/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
-
根據上面的Schema約束編寫XML
-
宣告方式
<書架 xmlns="http://www.itcast.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.itcast.cn bookSchema.xsd" >
<?xml version="1.0" encoding="UTF-8" ?> <書架 xmlns="http://www.itcast.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.itcast.cn bookSchema.xsd" > <書> <書名>斗羅大陸</書名> <作者>唐家三少</作者> <售價>99.8</售價> </書> </書架>
-
<?xml version="1.0" encoding="UTF-8" ?>
<a:書架 xmlns:a="http://www.itcast.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itcast.cn bookSchema.xsd
"
>
<a:書 bid="1">
<a:書名>資料庫從入門到刪庫</a:書名>
<a:作者>榮榮</a:作者>
<a:售價>99.8</a:售價>
</a:書>
</a:書架>
第二章 正則表示式
知識點-- 正則表示式的概念及演示
目標
- 理解正則表示式的概念
路徑
- 正則表示式的概念及演示
講解
-
概述: 正則表示式其實就是一個匹配規則,用來替換之前複雜的if結構判斷
-
在Java中,我們經常需要驗證一些字串,是否符合規則, 例如:校驗qq號碼是否正確,手機號碼是否正確,郵箱是否正確等等。那麼如果使用if就會很麻煩, 而正則表示式就是用來驗證各種字串的規則。它內部描述了一些規則,我們可以驗證使用者輸入的字串是否匹配這個規則。
-
先看一個不使用正則表示式驗證的例子:下面的程式讓使用者輸入一個QQ號碼,我們要驗證:
- QQ號碼必須是5--15位長度
- 而且必須全部是數字
- 而且首位不能為0
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你的QQ號碼:");
String qq = sc.next();
System.out.println(checkQQ(qq));
}
//我們自己編寫程式碼,驗證QQ號碼
private static boolean checkQQ(String qq) {
//1.驗證5--15位
if(qq.length() < 5 || qq.length() > 15){
return false;
}
//2.必須都是數字;
for(int i = 0;i < qq.length() ; i++){
char c = qq.charAt(i);
if(c < '0' || c > '9'){
return false;
}
}
//3.首位不能是0;
char c = qq.charAt(0);
if(c == '0'){
return false;
}
return true;//驗證通過
}
}
- 使用正則表示式驗證:
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你的QQ號碼:");
String qq = sc.next();
System.out.println(checkQQ2(qq));
}
//使用正則表示式驗證
private static boolean checkQQ2(String qq){
String regex = "[1-9]\\d{4,14}";//正則表示式
return qq.matches(regex);
}
}
上面程式checkQQ2()方法中String型別的變數regex就儲存了一個"正則表示式 ",而這個正則表示式就描述了我們需要的三個規則。matches()方法是String類的一個方法,用於接收一個正則表示式,並將"本物件"與引數"正則表示式"進行匹配,如果本物件符合正則表示式的規則,則返回true,否則返回false。
小結
- 正則表示式其實就是一個匹配規則,用來替換之前複雜的if結構判斷
知識點-- 正則表示式的基本使用
目標
- 掌握如何書寫正則表示式
路徑
- 正則表示式-字元類
- 正則表示式-邏輯運算子
- 正則表示式-預定義字元
- 正則表示式-數量詞
- 正則表示式-分組括號
講解
3.2.1 正則表示式-字元類
-
語法示例:[] 表示匹配單個字元 ^ 取反 - 範圍
-
[abc]:代表a或者b,或者c字元中的一個。
-
[^abc]:代表除a,b,c以外的任何字元。
-
[a-z]:代表a-z的所有小寫字元中的一個。 左右包含
-
[A-Z]:代表A-Z的所有大寫字元中的一個。
-
[0-9]:代表0-9之間的某一個數字字元。
-
[a-zA-Z0-9]:代表a-z或者A-Z或者0-9之間的任意一個字元。
-
[a-dm-p]:a 到 d 或 m 到 p之間的任意一個字元。
-
-
程式碼示例:
public class Test1 {
public static void main(String[] args) {
String str = "ead";
//1.驗證str是否以h開頭,以d結尾,中間是a,e,i,o,u中某個字元
//2.驗證str是否以h開頭,以d結尾,中間不是a,e,i,o,u中的某個字元
//3.驗證str是否a-z的任何一個小寫字元開頭,後跟ad
//4.驗證str是否以a-d或者m-p之間某個字元開頭,後跟ad
String str = "ead";
//1.驗證str是否以h開頭,以d結尾,中間是a,e,i,o,u中某個字元
System.out.println(str.matches("h[aeiou]d"));// false
System.out.println("hed".matches("h[aeiou]d"));// true
System.out.println("head".matches("h[aeiou]d"));// false
System.out.println("============================================================");
//2.驗證str是否以h開頭,以d結尾,中間不是a,e,i,o,u中的某個字元
System.out.println(str.matches("h[^aeiou]d"));// false
System.out.println("had".matches("h[^aeiou]d"));// false
System.out.println("hd".matches("h[^aeiou]d"));// false
System.out.println("hzd".matches("h[^aeiou]d"));// true
System.out.println("============================================================");
//3.驗證str是否a-z的任何一個小寫字元開頭,後跟ad
System.out.println(str.matches("[a-z]ad"));// true
System.out.println("Aad".matches("[a-z]ad"));// false
System.out.println("============================================================");
//4.驗證str是否以a-d或者m-p之間某個字元開頭,後跟ad
System.out.println(str.matches("[a-dm-p]ad"));// false
System.out.println("bad".matches("[a-dm-p]ad"));// true
System.out.println("nad".matches("[a-dm-p]ad"));// true
System.out.println("nad".matches("[a-d|m-p]ad"));// true
}
}
3.2.2 正則表示式-邏輯運算子
-
語法示例:
- &&:並且
- | :或者
-
程式碼示例:
public class Test2 {
public static void main(String[] args) {
/*
正則表示式-邏輯運算子
- 語法示例:
1. &&:並且
2. | :或者
*/
//1.要求字串是小寫子音字元開頭,後跟ad 除了a,e,i,o,u之外,其他的都是子音字母
//2.要求字串是aeiou中的某個字元開頭,後跟ad
String str = "had";
//1.要求字串是小寫子音字元開頭,後跟ad 除了a,e,i,o,u之外,其他的都是子音字母
System.out.println(str.matches("[^aeiou]ad"));// true
System.out.println(str.matches("[a-z&&[^aeiou]]ad"));// true
System.out.println("aad".matches("[^aeiou]ad"));// false
System.out.println("aad".matches("[a-z&&[^aeiou]]ad"));// false
System.out.println("===================================================");
//2.要求字串是aeiou中的某個字元開頭,後跟ad
System.out.println(str.matches("[aeiou]ad"));// false;
System.out.println(str.matches("[a|e|i|o|u]ad"));// false;
System.out.println("aad".matches("[aeiou]ad"));// true
System.out.println("aad".matches("[a|e|i|o|u]ad"));// true
}
}
3.2.3 正則表示式-預定義字元
-
語法示例:
- "." : 匹配任何字元。如果要表示一個字元點,那麼就得使用\.
- "\d":任何數字[0-9]的簡寫;
- "\D":任何非數字[^0-9]的簡寫;
- "\s": 空白字元:[ \t\n\x0B\f\r] 的簡寫
- "\S": 非空白字元:[^\s] 的簡寫
- "\w":單詞字元:[a-zA-Z_0-9]的簡寫
- "\W":非單詞字元:[^\w]
-
程式碼示例:
public class Test3 {
public static void main(String[] args) {
/*
正則表示式-預定義字元
- 語法示例:
1. "." : 匹配任何字元。如果要表示一個字元點,那麼就得使用\.
2. "\d":任何數字[0-9]的簡寫;
3. "\D":任何非數字[^0-9]的簡寫;
4. "\s": 空白字元:[ \t\n\x0B\f\r] 的簡寫
5. "\S": 非空白字元:[^\s] 的簡寫
6. "\w":單詞字元:[a-zA-Z_0-9]的簡寫
7. "\W":非單詞字元:[^\w]
*/
//1.驗證str是否3位數字
//2.驗證手機號:1開頭,第二位:3/5/8,剩下9位都是0-9的數字
//3.驗證字串是否以h開頭,以d結尾,中間是任何字元
//4.驗證str是否是:h.d
String str = "258";
//1.驗證str是否3位數字
System.out.println(str.matches("[0-9][0-9][0-9]"));// true
System.out.println(str.matches("\\d\\d\\d"));// true
System.out.println("a58".matches("\\d\\d\\d"));// false
System.out.println("====================================================");
//2.驗證手機號:1開頭,第二位:3/5/8,剩下9位都是0-9的數字
System.out.println(str.matches("[1][358]\\d\\d\\d\\d\\d\\d\\d\\d\\d"));// false
System.out.println("13866668888".matches("[1][358]\\d\\d\\d\\d\\d\\d\\d\\d\\d"));// true
System.out.println("17666668888".matches("[1][358]\\d\\d\\d\\d\\d\\d\\d\\d\\d"));// false
System.out.println("====================================================");
//3.驗證字串是否以h開頭,以d結尾,中間是任何字元
System.out.println(str.matches("h.d"));// false
System.out.println("h%d".matches("h.d"));// true
System.out.println("====================================================");
//4.驗證str是否是:h.d
System.out.println(str.matches("h\\.d"));// false
System.out.println("h%d".matches("h\\.d"));// false
System.out.println("h.d".matches("h\\.d"));// true
System.out.println("====================================================");
String str1 = "itheiam.itcast.baidu.taobao";
String[] arr = str1.split("\\.");
for (String s : arr) {
System.out.println(s);
}
}
}
3.2.4 正則表示式-數量詞
-
語法示例:
- X? : 0次或1次
- X* : 0次到多次
- X+ : 1次或多次
- X{n} : 恰好n次
- X{n,} : 至少n次(包含n)
- X{n,m}: n到m次(n和m都是包含的)
-
程式碼示例:
public class Test4 {
public static void main(String[] args) {
/*
正則表示式-數量詞
- 語法示例:
1. X? : 0次或1次
2. X* : 0次到多次
3. X+ : 1次或多次
4. X{n} : 恰好n次
5. X{n,} : 至少n次 包含n
6. X{n,m}: n到m次(n和m都是包含的)
*/
//1.驗證str是否是三位數字
//2.驗證str是否是多位數字
//3.驗證str是否是手機號:1).第一位為1 2).第二位是3,5,8 3).後面9位都是數字
//4.驗證qq號碼:1).5--15位;2).全部是數字;3).第一位不是0
String str = "258";
//1.驗證str是否3位數字
System.out.println(str.matches("[0-9]{3}"));// true
System.out.println(str.matches("\\d{3}"));// true
System.out.println("a58".matches("\\d{3}"));// false
System.out.println("======================================================");
//2.驗證str是否是多位數字
System.out.println(str.matches("\\d+"));// true
System.out.println("2".matches("\\d+"));// true
System.out.println("2".matches("\\d*"));// true
System.out.println("2".matches("\\d?"));// true
System.out.println("".matches("\\d+"));// false
System.out.println(" ".matches("\\d+"));// false
System.out.println("======================================================");
//3.驗證str是否是手機號:1).第一位為1 2).第二位是3,5,8 3).後面9位都是數字
System.out.println(str.matches("[1][358]\\d{9}"));// false
System.out.println("13866668888".matches("[1][358]\\d{9}"));// true
System.out.println("17666668888".matches("[1][358]\\d{9}"));// false
System.out.println("======================================================");
//4.驗證qq號碼:1).5--15位;2).全部是數字;3).第一位不是0
System.out.println("1234".matches("[1-9]\\d{4,14}"));// false
System.out.println("123456789".matches("[1-9]\\d{4,14}"));// true
System.out.println("01234455657".matches("[1-9]\\d{4,14}"));// false
System.out.println("1323243a2323".matches("[1-9]\\d{4,14}"));// false
}
}
3.2.5 正則表示式-分組括號( )
public class Test5 {
public static void main(String[] args) {
/*
正則表示式-分組括號( )
*/
String str = "DG8FV-B9TKY-FRT9J-99899-XPQ4G";
// 分成5組: 前面4組的規則是一樣的 後面一組單獨規則
System.out.println(str.matches("[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}-[A-Z0-9]{5}"));// true
System.out.println(str.matches("([A-Z0-9]{5}-){4}([A-Z0-9]{5})"));// true
System.out.println("======================================================================");
// 擴充套件: 匹配疊詞
// 嘿嘿 呵呵哈哈 呵呵呵哈哈哈 高興高興
// (.)代表第一組,\\1表示第一組再出現一次
System.out.println("嘿嘿".matches("(.)\\1"));// true
// 第一個(.)代表第一組,\\1表示第一組再出現一次;第二個(.)代表第二組,\\2表示第二組再出現一次
System.out.println("呵呵哈哈".matches("(.)\\1(.)\\2"));// true
// 第一個(.)代表第一組,\\1表示第一組再出現一次;第二個(.)代表第二組,\\2表示第二組再出現一次;第三個(.)代表第三組,\\3表示第三組再出現一次
System.out.println("呵呵哈哈嘿嘿".matches("(.)\\1(.)\\2(.)\\3"));// true
// 第一個(.)代表第一組,\\1表示第一組再出現一次,{2}表示第一組總共出現2次;第二個(.)代表第二組,\\2表示第二組再出現一次,{2}第二組總共出現2次
System.out.println("呵呵呵哈哈哈".matches("(.)\\1{2}(.)\\2{2}"));// true
System.out.println("高興高興".matches("(..)\\1"));// true
}
}
知識點-- String中正則表示式的使用
目標
在String中也有幾個方法是可以使用正則表示式來操作的, 下面我們來學習一下
路徑
- String的split方法中使用正則表示式
- String類的replaceAll方法中使用正則表示式
講解
3.3.1 String的split方法中使用正則表示式
-
String類的split()方法原型:
public String[] split(String regex)//引數regex就是一個正則表示式。可以將當前字串中匹配regex正則表示式的符號作為"分隔符"來切割字串。
-
程式碼示例:
public class Demo {
public static void main(String[] args) {
String str = "18 4 567 99 56";
String[] strArray = str.split(" +");
for (int i = 0; i < strArray.length; i++) {
System.out.println(strArray[i]);
}
}
}
3.3.2 String類的replaceAll方法中使用正則表示式
- String類的replaceAll()方法原型:
public String replaceAll(String regex,String newStr)//引數regex就是一個正則表示式。可以將當前字串中匹配regex正則表示式的字串替換為newStr。
- 程式碼示例:
public class Demo {
public static void main(String[] args) {
//將下面字串中的"數字"替換為"*"
String str = "jfdk432jfdk2jk24354j47jk5l31324";
System.out.println(str.replaceAll("\\d+", "*"));
}
}
總結
- 能夠說出XML的作用
作為配置檔案
用來儲存資料,作為資料交換的載體
- 瞭解XML的組成元素
文件宣告
標籤
屬性
註釋
轉義字元
字元區
- 能夠說出有哪些XML約束技術
dtd(.dtd),schema(.xsd)
- 能夠說出解析XML文件DOM方式原理
xml檔案載入成一個Dom樹,生成一個Document物件,通過Document物件獲取根元素,然後進行操作....
- 能夠使用dom4j解析XML文件
建立解析器
解析xml: 讀取xml檔案,生成Document物件
根據Document物件獲取根元素
使用根元素獲取子元素進行操作...
- 能夠使用xpath解析XML
document物件的方法:
selectSingleNode(String xpath)獲取單個節點
selectNodes() 獲取多個節點
- 能夠理解正則表示式的作用
可以作為匹配規則,替換之前複雜的if判斷操作
- 能夠使用正則表示式的字元類
[]匹配單個字元, ^ 取反 -範圍
1. [abc]:代表a或者b,或者c字元中的一個。
2. [^abc]:代表除a,b,c以外的任何字元。
3. [a-z]:代表a-z的所有小寫字元中的一個。 左右包含
4. [A-Z]:代表A-Z的所有大寫字元中的一個。
5. [0-9]:代表0-9之間的某一個數字字元。
6. [a-zA-Z0-9]:代表a-z或者A-Z或者0-9之間的任意一個字元。
7. [a-dm-p]:a 到 d 或 m 到 p之間的任意一個字元。
- 能夠使用正則表示式的邏輯運算子
&&
|
- 能夠使用正則表示式的預定義字元類
. 任意字元
\\d 0-9數字
\\D 非0-9數字
\\w [A-Za-z_0-9]
\\W 非[A-Za-z_0-9]
\\s 空白字元
\\S 非空白字元
- 能夠使用正則表示式的數量詞
? 0個或1個
* 0個或多個
+ 1個或多個
{n} 恰好n次
{n,m} n到m次,包含n和m
{n,} 至少n次,包含n
- 能夠使用正則表示式的分組
()
()\\1
()\\2
...
- 能夠在String的split方法中使用正則表示式
String[] split(String regex) 根據正在表示式的規則進行分割
String replaceAll(String regex,String newStr)