java基礎10:Regex與反射

來源:互聯網
上載者:User

標籤:javase   Regex   反射   

 

關於Java基礎的文章,我覺得寫得還可以,以前發在了我其它的部落格了,肯定是原創,現在再分享給大家出來。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 一、Regex
一、概述1、概念:

  Regex,又稱正規標記法、常規標記法,電腦科學的一個概念。Regex使用單個字串來描述、匹配一系列符合某個句法規則的字串。在很多文字編輯器裡,Regex通常被用來檢索、替換那些符合某個模式的文本。

  許多程式設計語言都支援利用Regex進行字串操作。

  Regex是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字串”,這個“規則字串”用來表達對字串的一種過濾邏輯。

2、作用

給定一個Regex和另一個字串,我們可以達到如下的目的:

    1. 給定的字串是否符合Regex的過濾邏輯(稱作“匹配”);

    2. 可以通過Regex,從字串中擷取我們想要的特定部分。

3、Regex的特點是:

    1. 靈活性、邏輯性和功能性非常的強;

    2. 可以迅速地用極簡單的方式達到字串的複雜控制。

    3. 對於剛接觸的人來說,比較晦澀難懂。

 

二、常見功能1,匹配

String的matches方法

<span style="white-space:pre"></span>/** * qq號校正 需求:長度5-15的數字,不能以0開頭 */private static void fun2() {String s = "023";boolean b = s.matches("[1-9][0-9]*{4,14}");b = s.matches("[1-9]\\d*{4,14}");// 相等System.out.println(b);}


2,切割

String的split()方法

<span style="white-space:pre"></span>/** * 切割方法 */private static void fun3() {// 切割空格String s = "afdf            dfsfd         dafa";String[] names = s.split(" +");for (String name : names) {System.out.println(name);}// 切割疊詞String s1 = "afdfaaaaaaadfsfdssdafa";String[] myNames = s.split("(.)\\1+");for (String name : myNames) {System.out.println(name);}}


3,替換

String的replaceAll()方法

<span style="white-space:pre"></span>/** * 替換 */private static void fun4() {String s1 = "afdfaaaaaaadfsfdssdafa";String s = s1.replaceAll("(.)\\1+", "$1");System.out.println(s);}



4,擷取

Matcher的find()方法,尋找下一個子序列

Matcher的group()方法,返回由以前匹配操作所匹配的輸入子序列

/** * 擷取 */private static void fun5() {Pattern p = Pattern.compile("a*b");//將正則規則封裝成對象Matcher m = p.matcher("aaaaabaaabdfdfaaabss");//匹配的字串封裝成對象boolean b = m.matches();//m.find();//System.out.println(m);while(m.find()){System.out.println(m.group());}}


三、網頁爬蟲

網頁爬蟲聽起來挺好玩,但是道理非常簡單,就是在互連網上擷取指定規則的資料

而這個指定規則可以使用Regex來寫

public class PaChong {public static void main(String[] args) throws Exception {List<String> list = fun1();for (String name: list) {System.out.println(name);}}/** * @throws Exception  *  */private static List<String> fun1() throws Exception {URL url = new URL("http://127.0.0.1:8080/myweb/test.html");InputStream in = url.openStream();BufferedReader bufr = new BufferedReader(new InputStreamReader(in));ArrayList<String> list = new ArrayList<String>();String main_rgex = "\\[email protected]\\w+(\\.\\w+)+";Pattern p =Pattern.compile(main_rgex);String line = null;while((line = bufr.readLine()) != null){Matcher m = p.matcher(line);while(m.find()){list.add(m.group());}}return list;}}



 二、反射


一,概述

 

1、定義

JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;

對於任意一個對象,都能夠調用它的任意一個方法和屬性;

 這種動態擷取的資訊以及動態調用對象的方法的功能稱為java語言的反射機制。 

  動態擷取類中資訊,就是java反射 。


2、反射好處

反射技術大大提高了程式的擴充性


3、Java反射機制主要提供了以下功能: 

在運行時判斷任意一個對象所屬的類;

在運行時構造任意一個類的對象;

在運行時判斷任意一個類所具有的成員變數和方法;

在運行時調用任意一個對象的方法;

產生動態代理


 

二、擷取Class對象
public static void getClassObject_3() throws ClassNotFoundException {String className = "cn.itcast.bean.Person";Class clazz = Class.forName(className);System.out.println(clazz);}



三、擷取Class中的建構函式
<span style="white-space:pre"></span>/** * 建立有參數的執行個體 * @throws Exception  */private static void fun2() throws Exception {String name = "jinfulin.b.bean";Class clazz = Class.forName(name);Constructor cons = clazz.getConstructor(String.class,int.class);Object obj = cons.newInstance("sf",21);}/** * 建立一個新的無參的執行個體 */private static void fun1() throws ClassNotFoundException,InstantiationException, IllegalAccessException {String name = "jinfulin.p.bean.Person";Class clazz = Class.forName(name);Object obj = clazz.newInstance();//建立一個新的無參的執行個體System.out.println(obj);}




四、擷取Class中的欄位
Field field = null;clazz.getField("age");//只能擷取公有的field = clazz.getDeclaredField("age");//只擷取本類,但包含私人。//對私人欄位的訪問取消許可權檢查。暴力訪問。field.setAccessible(true);private static void getFileDemo() throws Exception {Class clazz = Class.forName("jinfulin.p.bean.Person");Field field = null;field = clazz.getDeclaredField("name");//只擷取本類,但包含的私人欄位。field.setAccessible(true);//對私人欄位的訪問取消許可權檢查。暴力訪問。Object obj = clazz.newInstance();field.set(obj, "金福林");Object o = field.get(obj);System.out.println(o);}


四、擷取Class中的方法
<span style="white-space:pre"></span>Method[] methods  = clazz.getMethods();//擷取的都是公有的方法。 methods = clazz.getDeclaredMethods();//只擷取本類中所有方法,包含私人。 method.invoke(obj, "小強",89);//設定參數值public static void getMethodDemo_3() throws Exception {Class clazz = Class.forName("cn.itcast.bean.Person");Object obj = clazz.newInstance();Method method = clazz.getMethod("paramMethod", String.class,int.class);method.invoke(obj, "小強",89);}


 三、最後


Regex用起來雖然簡單,但是符合複雜,可讀性差,不過呢,一些常見的字串的Regex比如郵箱、社會安全號碼等都可以在網上找的,拿過來用就好。

反射技術比較重要,反射還可以和抽象原廠模式結合做更換db用,反射的知識以後還會再講到的。






java基礎10:Regex與反射

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.