JAVA复习(对象的克隆、正则表达式)
對象的克隆
?
對象的克隆就是復制的操作,和之前學習的引用傳遞不同 在引用傳遞中一個 實例 可以有多個名字 但是多個名字都指向一個對象
?
克隆出來的對象 和之前的對象 沒有任何的引用關系
?
想要實現對象的克隆,首先克隆對象的類,必須實現一個接口: public interface Cloneable ,只有實現了該接口的類才能有克隆的能力:
?
?
可用通過調用 clone()方法 為一個對象克隆,而這個方法定義在Object類中,所有的類都默認存在該方法
范例:實現對象的克隆
| Person per1=new Person(); ????????? ????????? Person per2=(Person) per1.clone(); ????????? ????????? System.out.println(per1==per2); |
?
通過調用clone方法可以為一個對象克隆,但是必須實現clonable接口
?
?
?
?
正則表達式:
?
正則表達式解決的問題主要在于對字符串的格式化處理,為了理解方便做一個案例,判斷一個字符串是否全部是由數字組成
| public static void main(String[] args) { ????????? ????????? String str="12A3"; ????????? ????????? System.out.println(isNumber(str)); ???? } ???? ???? ???? public static boolean isNumber(String str) { ????????? ????????? ????????? char[]arr=str.toCharArray(); //先變為char數組 ????????? ????????? ????????? for(int i=0;i<arr.length;i++) { ?????????????? ?????????????? ?????????????? if(arr[i]<'0'||arr[i]>'9') { ??????????????????? ??????????????????? return false; ?????????????? }???????? ????????? } ????????? return true; ????????? ????????? ???? } |
?
接下來使用正則完成同樣的功能:
| public static void main(String[] args) { ????????? ????????? String str="123"; ????????? ????????? if(str.matches("\\d+")) { ?????????????? ?????????????? System.out.println("是數字"); ????????? }else { ?????????????? ?????????????? System.out.println("不是數字"); ????????? } ???? } |
?
?
通過正則的驗證,可以很方便的完成字符串的處理操作
?
正則的匹配符號: 觀察java.util.regex 包pattern類
?
1? 轉義字符 : \\?? \
?
2 \d 代表任意的一位數字? \D 表示任意非數字
?
3 [abc] 匹配字符串里面 可能 a? b? c 中的其中一個
?
4 [^abc] 非的意思 不是 a? b? c 其中的一個
?
5 [a-zA-Z] 全部字母中的任意一個
?
6 \w? 任意的數字 字母 _ 等價于 [a-zA-Z]
?
7\W? 非
?
8 ? 出現0次或者1次
?
9 + 出現一次或者多次
?
10 {n} n 給定的次數
?
11 {m,n}
?
正則表達式 記住常用的就OK 不常用的有生成工具 一鍵生成
?
?
String類對正則的支持:
?
1 public?boolean?matches(String?regex) 與指定的正則進行匹配
?
2 public?String?replaceAll(String?regex, String?replacement) 替換指定正則的全部內容
?
3 public?String[]?split(String?regex);根據指定正則進行字符串的分割
范例: 消除字符串中字母
?
| public static void main(String[] args) { ????????? ????????? String str="123fdfsds5438fgh124jj9"; ????????? ????????? // 首先定義 正則規則: ????????? ????????? String regex="[a-zA-Z]+"; //字母出現一次或者多次 ????????? ????????? System.out.println(str.replaceAll(regex, "")); ???? } |
?
練習:給定123fdfsds5438fgh124jj9字符串 按照數字拆分
| public static void main(String[] args) { ???????? ???????? String str="123fdfsds5438fgh124jj9"; ???????? ???????? // 首先定義 正則規則: ???????? ???????? String regex="\\d"; //字母出現一次或者多次 ???????? ???????? String[] result=str.split(regex); ???????? ???????? for(int i=0;i<result.length;i++) { ???????????? ???????????? System.out.print(result[i]+"、"); ???????? } ??? } |
?
練習:給定 aaaaab? 字符串? 在b之前可以有任意個a? 但是不能沒有至少有1 個
| public static void main(String[] args) { ????????? ????????? String str="aaaab"; ????????? ???? ????????? String regex="a+b"; ????????? ????????? System.out.println(str.matches(regex)); ????????? ???? } ???? |
?
?
練習: 驗證日期格式 是否合法,如果合法 轉換為Date類型輸出
1989-02-06
| public static void main(String[] args) throws ParseException { ????????? ????????? ????????? String str="1989-02-06";? //網站上的日期 現在都不讓用戶輸入 鼠標點擊 ????????? ????????? String regex="\\d{4}-\\d{2}-\\d{2}"; ????????? ????????? if(str.matches(regex)) { ?????????????? ?????????????? Date date=new SimpleDateFormat("yyyy-MM-dd").parse(str); ?????????????? System.out.println(date); ????????? }else { ?????????????? ?????????????? System.out.println("輸入的日期格式不正確"); ????????? } ???? } |
?
?
1? 使用正則表達式驗證郵箱是否合法
?
2? 驗證java 標識符是否合法 數字 字母 下劃線組成 不能以數字開頭
?
?
| package qf; ? public class Zz2 { ??? public static void main(String[] args) { ???????? /*String str="1996-11-01"; ???????? String regex="\\d{4}-\\d{2}-\\d{2}"; ???????? System.out.println(str.matches(regex));*/ ???????? String emal="1264957234@qq.com"; ???????? String emal1="wgq1264957234@163.com"; ???????? String regex="\\w{5,16}@\\w{2,3}.com"; ???????? System.out.println(emal.matches(regex)); ???????? System.out.println(emal1.matches(regex)); ??? } ? } ? |
?
| package qf; ? public class Zz2 { ??? public static void main(String[] args) { ??????? String str="_ad2"; ??????? String regex="[a-zA-Z_]\\w+"; ??????? System.out.println(str.matches(regex)); ??? } ? } ? |
?
總結
以上是生活随笔為你收集整理的JAVA复习(对象的克隆、正则表达式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软发布 Edge 浏览器 111.0.
- 下一篇: JAVA复习(date)