花了一個晚上的時間,把Java正則表達式的視頻又重新看了一遍。然後寫了個小程序測試了一下。還有一些比較特殊的語法沒有測試,大概瞭解了一下。需要用到時再去看吧。正則表達式理解不難,但要用到熟練無比,出神入化,還是有難度的。
public class Test1 { /* * 測試 正則表達式語法 */ public static void main(String[] args){ Test1 t = new Test1(); t.testXieGang();//測試 斜槓 / t.testReplaceAll();//測試 String 類的 replace 方法 t.testZhongKuoHao();//測試 [] t.testPreDefChar(); // 測試 /s /w /d /S /D /W 大寫的表示相反 t.testBoundMatch(); // 測試邊界匹配 t.testLogic(); // 測試邏輯操作符 } private void testXieGang(){ /* * 字符串是表示一個連續的字符序列,在程序中我們用類String來描述一個字符串, * 這個用String描述的字符串與實際的字符串是不一定完全一樣的。比如在字符串中雙引號怎麼表示?某些空白字符怎麼表示,所以我們必須在 * String類中引入 轉義字符的概念,也就是/。 比如說 String str = "ab/t/////"b" 實際上表示的是 ab //"b,這是一個7個字符的序列。 * 正則表達式是一個特殊的表達式,但也要遵守這些規定。比如 String str="////" 實際上是兩個普通字符 // ,然後用正則表達式來編譯它, * 就會認爲只是一個/ */ System.out.println("//".matches("////")); // true 兩個/ 必須用正則表達式中的//// 表示 System.out.println("//n".matches("////n"));//true String str = "ni/t//hao/"an"; System.out.println(str); // 輸出 ni /hao"an 這個纔是實際字符串 System.out.println(str.matches(".{10}")); // TRUE str中是由10個字符組成的 } private void testReplaceAll(){ String str = "niha+********oma?/t"; str = str.replaceAll("[?]", "");// 單獨的 ?(+*可以單獨用) 會出問題因爲有特殊意義 用[] 括起來或者//?即可 System.out.println(str);// niha+********oma str = str.replace("+", ""); System.out.println(str);//niha********oma str = str.replace("*", ""); System.out.println(str);//nihaoma System.out.println("92".matches("(//d+)"));// true 小括號也是特殊字符 System.out.println("(92)".matches("//(//d+[)]"));// true 小括號也是特殊字符,在正則表達式中 用[] 或者 // } private void testZhongKuoHao(){ String str = "da jia hao cai shi zhen de hao "; String str1 = "aBDbcA"; System.out.println("a^c".matches("[a-z^A-Z]{3}")); //true ^只有放在[]裏面第一個位置 纔是表示否定,否則就是普通字符 System.out.println("ABC".matches("[^a-zA-Z]{3}")); //false ^表示否定,It is false ; System.out.println("abc".matches("[a-n&&g-z]{3}")+" "+"hin".matches("[a-n&&g-z]{3}"));// false true System.out.println("efg".matches("[^a-d&&b-g]+")); //true a,b,c,d 都是FALSE e f g 是TRUE System.out.println("bcd".matches("[a-d&&^b-g]+")); //true ^ 在中間只是一個普通字符 System.out.println("aaa".matches("[a-d&&[^b-g]]+"));//true 只有a 纔是匹配的 } private void testPreDefChar(){ // 測試預定字符類 System.out.println("a/n/ta/ta".replaceAll("//s", "")); //aaa 等價於[ /t/n/x0B/f/r] System.out.println("(&((&^*^*^*Liujiyong814329735".replaceAll("//w","")); //(&((&^*^*^* 等價於 [a-zA-Z_0-9] System.out.println("liu8143 ji29735 yong".replaceAll("//D", "")); //814329735 } private void testBoundMatch(){ //測試邊界匹配 System.out.println("java (java)java/tjavajava,java".replaceAll("//bjava//b", ""));// () javajava, /b表示單詞邊界 System.out.println("java (java)java/tjavajava,java".replaceAll("^java", "")); // (java)java javajava,java ^表示字符串開頭 System.out.println("java (java)java/tjavajava,java".replaceAll("java$", "")); //java (java)java javajava, $表示字符串開頭 } private void testLogic(){//測試邏輯符 | System.out.println("256".matches("(//d{1,2})|(1//d{2})|(2[0-4]//d)|(25[0-5])"));//false System.out.println("0".matches("(//d{1,2})|(1//d{2})|(2[0-4]//d)|(25[0-5])"));//true System.out.println("56".matches("(//d{1,2})|(1//d{2})|(2[0-4]//d)|(25[0-5])"));//true System.out.println("156".matches("(//d{1,2})|(1//d{2})|(2[0-4]//d)|(25[0-5])"));//true System.out.println("255".matches("(//d{1,2})|(1//d{2})|(2[0-4]//d)|(25[0-5])"));//true System.out.println("99".matches("//d{1,2}|1//d{2}|2[0-4]//d|25[0-5]")); // true System.out.println("255.192.0.1".matches("((//d{1,2}|1//d{2}|2[0-4]//d|25[0-5])//.){3}(//d{1,2}|1//d{2}|2[0-4]//d|25[0-5])")); // true ip正則表達式 System.out.println("b".matches("[a-d&&b-g]")); //TRUE b c d 會匹配這個正則表達式 System.out.println("a&&b".matches("a&&b")); //TRUE 在[]外面 && 只是普通字符 //System.out.println("a".matches("a|bc|c")); // true //System.out.println("bcd".matches("a|bc|c"));// false //System.out.println("c".matches("a|bc|c"));// true //System.out.println("92".matches("//d{1,2}"));// true } }
前言 在單機環境中,我們主要通過線程間的加鎖機制來確保同一時間只有一個線程能夠訪問某個共享資源或執行某個關鍵代碼塊,從而防止各種併發修改異常。例如,在Java中提供了synchronized/Lock。但是在分佈式環境中,這種線程間的鎖機制
如果你還擁有着一張有效的“學生證”,在這個充滿機遇的夏天,我們誠邀你加入一個充滿挑戰和機遇的開源冒險——開源之夏。 這不僅是一個簡單的編程開發活動,假如你成功參加並結項之後,還能獲得中科院軟件所官方頒發的證書和獎金,簡直太有趣啦! Apa
本文分享自華爲雲社區《Java Chassis 3技術解密:契約優先(API First)開發》,作者: liubao68。 契約優先(API First)開發是指應用程序開發過程中,將API設計作爲第一優先級的任務。契約優先開發隨着Web
本教程將指導您如何生成一個可運行的Google Web Toolkit (GWT) 2.1和Spring應用程序,該應用程序爲域模型實現了CRUD應用程序模式。在本教程中,您將學習如何: 安裝Google Eclipse插件 爲GWT配置
曾幾何時,中臺一度被當做“變革靈藥”,嫁接在“前臺作戰單元”和“後臺資源部門”之間,實現企業各業務線的“打通”和全域業務能力集成,提高開發和服務效率。但在中臺如火如荼之際,我們可以發現各大企業又在反其道而行,紛紛不斷進行“拆中臺”,那
正常運行結束 程序運行結束,線程自動結束。 使用退出標誌退出線程 一般 run()方法執行完,線程就會正常結束,但是,有些線程是伺服線程。它們需要長時間的運行,只有在外部某些條件滿足的情況下,才能關閉這些線程。使用一個變量來控制循環
雲原生月度動態 雲原生是企業數字創新的最短路徑。 《阿里云云原生每月動態》,從趨勢熱點、產品新功能、服務客戶、開源與開發者動態等方面,爲企業提供數字化的路徑與指南。 趨勢熱點 🥇 Cloud Native Day - Indonesia 成
一、問題 近期頻繁收到關於FullGC的告警 二、基礎知識介紹 2.1 Java內存結構 目前系統使用的是ParNewGC、CMS垃圾回收,此時的1.8JDK內存模型如下: 注意大對象可以直接放到老年代中,可以通過-XX:Pretenur
Map是用於保存具有映射關係的數據集合,它具有雙列存儲的特點,即一次必須添加兩個元素,即一組鍵值對<Key,Value>,其中Key的值不可重複(當Key的值重複的時候,後面插入的對象會將之前插入的具有相同的Key值的對象覆蓋掉),Valu
本文分享自華爲雲社區《華爲雲短信服務教你用Perl實現Smgp協議》,作者:張儉。 引言&協議概述 中國電信短消息網關協議(SMGP)是中國網通爲實現短信業務而制定的一種通信協議,全稱叫做Short Message Gateway Pro
前言 lightdb數據庫是恆生自主研發的面向金融領域的支持集中式和分佈式的國產數據庫,實現基於PostgreSQL,因此也會遵循postgreSQL的一些事務特性。本文章主要說明的特性爲:在一個事務中,如果有一個SQL執
Java 裏面線程池的頂級接口是 Executor,但是嚴格意義上講 Executor 並不是一個線程池,而只是一個執行線程的工具。真正的線程池接口是 ExecutorService。 newCachedThreadPool 創建一個
前言 本文主要提供了一種單元測試方法,力求0基礎人員可以從本文中受到啓發,可以搭建一套好用的單元測試環境,並能切實的提高交付代碼的質量。極簡體現在除了POM依賴和單元測試類之外,其他什麼都不需要引入,只需要一個本地能啓動的springboo
本文分享自華爲雲社區《【GaussTech速遞】技術解讀之細粒度資源管控》,作者:GaussDB 數據庫。 背景 對數據庫集羣內資源管控與資源隔離一直是企業客戶長久以來的訴求。華爲雲GaussDB作爲一款企業級分佈式數據庫,一直致力於
O2OA開發平臺在流程管理中,可以讓用戶在包含公文管理的項目實施過程中,輕鬆地實現標準化公文格式的在線編輯、痕跡保留、手寫籤批等功能。並且可以快速將版式公文編輯器集成到O2OA開發平臺之外的其他協同辦公系統中。 一、適用範圍 公文編