欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用正則表達(dá)式檢索、替換String中特定字符和正則表達(dá)式的一切

 更新時(shí)間:2020年09月02日 11:17:50   作者:CrazyMo_  
這篇文章主要給大家介紹了關(guān)于Java使用正則表達(dá)式檢索、替換String中特定字符和正則表達(dá)式的一切,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

引言

String這個(gè)對(duì)于程序原來說一定是最熟悉不過的,很多時(shí)候我們都習(xí)慣去使用String的原生方法去完成查找字符串、替換、刪除,而正則表達(dá)式由于略顯苦澀的語法常常被人忽略,其實(shí)很多時(shí)候使用正則表達(dá)式可以提高不少性能和節(jié)省資源。

一、正則表達(dá)式簡述

正則表達(dá)式正則表達(dá)是Java中比較矛盾的知識(shí)點(diǎn),因?yàn)槭褂闷饋砜梢院芎唵我部梢韵喈?dāng)?shù)赜须y度,但是對(duì)于字符串操作來說應(yīng)用得當(dāng)則事半功倍,字符串查找,搜索,匹配,替換等等,正則表達(dá)式無所不能。而所謂正則表達(dá)式本質(zhì)就是一個(gè)字符串(這個(gè)字符串按照一定的語法和規(guī)范被構(gòu)造出來作為限定條件),其主要參與者——Pattern和Matcher:Pattern是Java正則表達(dá)式API中的主要入口,是程序語言中對(duì)這個(gè)特殊正則字符串的編譯表示,需要使用正則表達(dá)式,第一步都是從構(gòu)造Pattern 類開始,而Matcher是輸入字符串進(jìn)行解釋和匹配操作的引擎,通過解釋 Pattern 對(duì) Character sequence 執(zhí)行匹配操作(即Matcher負(fù)責(zé)完成字符串的查找、匹配、替換等操作。)

二、正則表達(dá)式基本語法

1、預(yù)留字符

限定符 說明
. 任意英文字母比如a-z,表示從a到z
? 當(dāng)該字符緊跟在任何一個(gè)其他限制符(*,+,?,{n},{n,},{n,m})后面時(shí),匹配模式是非貪婪的。非貪婪模式盡可能少的匹配所搜索的字符串,而默認(rèn)的貪婪模式則盡可能多的匹配所搜索的字符串。例如,對(duì)于字符串“oooo”,“o+?”將匹配單個(gè)“o”,而“o+”將匹配所有“o”。
\ 反斜杠, 單獨(dú)的反斜杠做為轉(zhuǎn)義字符,與其他特殊字符一起使用。如果想匹配反斜杠本身,需要轉(zhuǎn)義。兩個(gè)反斜杠實(shí)際匹配一個(gè)反斜杠n字符的8進(jìn)制表示.n 在0至7之間取值
nn 字符的8進(jìn)制表示.n 在0至7之間取值
mnn 字符的8進(jìn)制表示. m 在0至3之間取值, n 在0至7之間取值
\xhh 字符的16進(jìn)制表示.
\uhhhh 字符的16進(jìn)制表示 0xhhhh. 對(duì)應(yīng)unicode 編碼字符
\t 縮進(jìn)符.
\n 換行符 (unicode: ‘\u000A')
\r 回車符 (unicode: ‘\u000D')
\f 制表符 (unicode: ‘\u000C')
\a 警報(bào)(鈴聲)字符 (unicode: ‘\u0007′)
\e 轉(zhuǎn)義符 (unicode: ‘\u001B')
\cx 控制符 x
\d 匹配任意數(shù)字 [0-9]
\D 匹配任意非數(shù)字 [^0-9]
\s 匹配任意空白符 (空格, 縮進(jìn), 換行,回車)
\S 匹配任意非空白符
\w 匹配任意單詞
\W 匹配任意非單詞

2、設(shè)置指定限定條件**[]**(即“[]”表示的是中括符里的內(nèi)容是條件)

限定符 說明
[a-z] 匹配小寫a to z范圍中任一個(gè)字符,又如[abc] 匹配 a, 或 b 或 c
[A-Z] 匹配大寫A to Z范圍中任一個(gè)字符
[a-zA-Z] 匹配小寫a to z或大寫A to Z范圍中一個(gè)字符
[0-9] 匹配小寫0 to 9范圍中一個(gè)字符
[0-9a-z] 匹配小寫0 to 9或a to z范圍中一個(gè)字符
[0-9[a-z]] 匹配小寫0 to 9或a to z范圍中一個(gè)字符(交集)
[^abc] 匹配不是a,b,c 的字符,是否定匹配
[a-zA-Z] 匹配a 到 z ,A到Z 直接的字符,是范圍匹配
[a-d[m-p]] 匹配a到d之間字符或 m到p之間字符,是并集匹配
[a-z&&[def]] 匹配 d, e, 或 f. 是交集匹配 (這里是在范圍 a-z和字符def之間取交集).
[a-z&&[^bc]] 匹配a-z 之間所有字符,排除bc的字符。是減法匹配
[a-z&&[^m-p]] 匹配a-z 之間所有字符,排除m-p之間的字符是減法匹配

3、邊界匹配

邊界符 說明
^ 匹配行首
$ 匹配行尾
\b 匹配單詞邊界
\B 匹配非單詞邊界
\A 匹配文本開頭
\G 匹配前一匹配項(xiàng)結(jié)尾
\Z 輸入的結(jié)尾,僅用于最后的結(jié)束符(如果有的話)
\z 匹配文本結(jié)尾

4、邏輯操作符和量詞表示

正則表達(dá)式支持少量的邏輯運(yùn)算(與,或)。與操作是默認(rèn)的,表達(dá)式 cmo,意味著c 與 m與o。

或操作需要顯示指定,用 | 表示。例如表達(dá)式 crazy|mo意味著crazy或 mo。

貪婪模式 饑餓模式 獨(dú)占模式 :說明:
X? X?? X?+ 匹配0或1次,即出現(xiàn)X 0或者1次
X* X**? X*+ 匹配0或多次
X+ X+? X++ 匹配1或多次
X{n} X{n}? X{n}+ 匹配n次
X{n,} X{n,}? X{n,}+ 匹配最少n次
X{n, m} X{n, m}? X{n, m}+ 匹配最少n次,最多m次

可參考表達(dá)式全集

三、正則表達(dá)式的應(yīng)用

編譯正則表達(dá)式的字符串值構(gòu)造對(duì)應(yīng)的模式Pattern對(duì)象

創(chuàng)建匹配給定輸入與此模式的匹配器Matcher

通過匹配器對(duì)象執(zhí)行操作,匹配器對(duì)象的方法很豐富,互相組合使用更加強(qiáng)大(JDK在線API

1、去掉字符串中的空格和換行符

public static String getNonBlankStr(String str) {  
  if(str!=null && !"".equals(str)) {  
   Pattern pattern = Pattern.compile("\\s*|\t|\r|\n"); //去掉空格符合換行符  
   Matcher matcher = pattern.matcher(str);  
   String result = matcher.replaceAll("");  
   return result;  
  }else {  
   return str;  
  }   
 } 

2、去掉指定特殊字符

public  static  String StringFilter(String  str)  throws PatternSyntaxException {
 
  // String  regEx = "[^a-zA-Z0-9]"; // 只允許字母和數(shù)字
  // 清除掉所有特殊字符(除了~之外)
  String regEx="[`!@#$%^&*()+=|{}':;',//[//].<>/?!@#¥%……&*()——+|{}【】‘;:”“'。,、?]";
  Pattern pattern  =  Pattern.compile(regEx);
  Matcher matcher  =  pattern.matcher(str);
  return  matcher.replaceAll("").trim();
}

3、Pattern.matches()檢查字符串中是否存在指定字符

public  static  String StringFilter(String  str)  throws PatternSyntaxException {
 
  // String  regEx = "[^a-zA-Z0-9]"; // 只允許字母和數(shù)字
  // 清除掉所有特殊字符(除了~之外)
  String regEx="[`!@#$%^&*()+=|{}':;',//[//].<>/?!@#¥%……&*()——+|{}【】‘;:”“'。,、?]";
  Pattern pattern  =  Pattern.compile(regEx);
  Matcher matcher  =  pattern.matcher(str);
  return  matcher.replaceAll("").trim();
}

4、Pattern.split()用正則表達(dá)式作為分隔符,把文本分割為String類型的數(shù)組

/**
* 結(jié)果:element = grjk Text 
element = wwwdsf 
element = Many 
element = egsdg r geg
*/
String text = "A reg grjk Text reg wwwdsf reg Many reg egsdg r geg";
String patternString = "reg";
Pattern pattern = Pattern.compile(patternString);
String[] split = pattern.split(text);
for(String element : split){
  System.out.println("element = " + element);
}

5、Matcher 實(shí)例的find() + start() + end()尋找字符串中指定字符串出現(xiàn)的次數(shù)和起始和結(jié)束的索引位置

/**
*結(jié)果:found: 1 : 2 - 4
found: 2 : 5 - 7
found: 3 : 23 - 25
found: 4 : 70 - 72
*/
String text  ="This is the text which is to be searched " +"for occurrences of the word 'is'.";				
String patternString = "is";				
Pattern pattern = Pattern.compile(patternString);				
Matcher matcher = pattern.matcher(text);
int count = 0;
while(matcher.find()) {				
  count++;				
  System.out.println("found: " + count + " : " + matcher.start() + " - " + matcher.end());				
}

6、Matcher 匹配指定格式的特殊字符串

		Pattern pattern = Pattern.compile("[0-9]*");//判斷是否都是數(shù)字
    Matcher isNum = pattern.matcher("1123是數(shù)字");
    if(isNum.matches()) {
      System.out.println("全部是數(shù)字");
    } else {
      System.out.println("有漢字");
    }

		//匹配任意字符串中包含形如“@數(shù)字&”格式的子串
		String st="看,墻面上的雕塑是什么?@322&大家一定猜到了,這是一個(gè)神經(jīng)元。匯區(qū)的研院校及企業(yè)資源,促進(jìn)產(chǎn)學(xué)研醫(yī)多個(gè)環(huán)節(jié)上的相互合作與交融";
		Pattern pattern = Pattern.compile("^(.*)@-?[1-9]\\d*&(.*)$"); //去掉空格符合換行符
		 Matcher matcher = pattern.matcher(st);
		 boolean result = matcher.find();

待續(xù)…

總結(jié)

到此這篇關(guān)于Java使用正則表達(dá)式檢索、替換String中特定字符和正則表達(dá)式的一切的文章就介紹到這了,更多相關(guān)Java正則表達(dá)式檢索、替換String特定字符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot應(yīng)用部署到Tomcat中無法啟動(dòng)的解決方法

    SpringBoot應(yīng)用部署到Tomcat中無法啟動(dòng)的解決方法

    這篇文章主要介紹了SpringBoot應(yīng)用部署到Tomcat中無法啟動(dòng)的解決方法,需要的朋友可以參考下
    2017-09-09
  • springboot模塊里面調(diào)用另外一個(gè)模塊的方法實(shí)現(xiàn)

    springboot模塊里面調(diào)用另外一個(gè)模塊的方法實(shí)現(xiàn)

    在Spring-Boot項(xiàng)目開發(fā)中,存在著本模塊的代碼需要訪問外面模塊接口,本文就來介紹一下springboot模塊里面調(diào)用另外一個(gè)模塊的方法實(shí)現(xiàn),感興趣的可以了解一下
    2023-11-11
  • 源碼解析Java類加載器

    源碼解析Java類加載器

    這篇文章主要給大家介紹了Java類加載器源碼解析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java+TestNG接口自動(dòng)化入門詳解

    Java+TestNG接口自動(dòng)化入門詳解

    本文主要介紹了Java+TestNG接口自動(dòng)化入門,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Spring Boot CLI安裝教程

    Spring Boot CLI安裝教程

    Spring Boot是一個(gè)命令行工具,用于使用Spring進(jìn)行快速原型搭建。本文重點(diǎn)給大家介紹Spring Boot CLI安裝教程,感興趣的朋友參考下吧
    2017-08-08
  • java實(shí)現(xiàn)interceptor攔截登錄權(quán)限

    java實(shí)現(xiàn)interceptor攔截登錄權(quán)限

    Java里的攔截器是動(dòng)態(tài)攔截action調(diào)用的對(duì)象,本文主要介紹了java實(shí)現(xiàn)interceptor攔截登錄權(quán)限,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Spring Boot和Docker實(shí)現(xiàn)微服務(wù)部署的方法

    Spring Boot和Docker實(shí)現(xiàn)微服務(wù)部署的方法

    這篇文章主要介紹了Spring Boot和Docker實(shí)現(xiàn)微服務(wù)部署的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • 使用log4j MDC實(shí)現(xiàn)日志追蹤

    使用log4j MDC實(shí)現(xiàn)日志追蹤

    這篇文章主要介紹了使用log4j MDC實(shí)現(xiàn)日志追蹤方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java生成二維碼并且給二維碼添加logo

    java生成二維碼并且給二維碼添加logo

    這篇文章主要介紹了java生成二維碼并且給二維碼添加logo的實(shí)例代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java mockito單元測(cè)試實(shí)現(xiàn)過程解析

    Java mockito單元測(cè)試實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Java mockito單元測(cè)試實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評(píng)論