日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java正则效率_善用Pattern提高你的应用处理正则表达式的效率(Java)

發(fā)布時(shí)間:2025/3/8 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java正则效率_善用Pattern提高你的应用处理正则表达式的效率(Java) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

舉個(gè)簡(jiǎn)單了例子,在一個(gè)需要用于注冊(cè)登錄的b/s模式的應(yīng)用中,在瀏覽器驗(yàn)證用戶注冊(cè)表單的合法性是必須的,但你為了防止hacker,在服務(wù)器再驗(yàn)證一次肯定也是必須的。

題目:在服務(wù)器端驗(yàn)證郵箱是否合法:通常你可能會(huì)這樣寫:

public boolean checkEmailLegal(String temp)

{

//temp = "ddenfj#@fe_dw.comw";

return temp.matches("^([\\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\\.[a-zA-Z0-9_-]{2,3}){1,2})$");

}

當(dāng)然這樣寫可以滿足你的需求,但是,今天要和大家分享我使用Pattern提高效率的使用心得,首先,先看一下我對(duì)小面代碼進(jìn)行的簡(jiǎn)單的測(cè)試:

import java.util.regex.Pattern;

public class SimpleTest {

public static void main(String[] args)

{

String temp = "ddenfj#@fe_dw.comw";

int count = 1;

long a = System.currentTimeMillis();

for(int i=0;i

{

temp.matches("^([\\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\\.[a-zA-Z0-9_-]{2,3}){1,2})$");

}

long b = System.currentTimeMillis();

System.out.println(b-a);

a = System.currentTimeMillis();

Pattern emailPattern = Pattern.compile("^([\\.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\\.[a-zA-Z0-9_-]{2,3}){1,2})$");

for(int i=0;i

{

emailPattern.matcher(temp).matches();

}

b = System.currentTimeMillis();

System.out.println(b-a);

}

}運(yùn)行次數(shù)為 1 時(shí),運(yùn)行結(jié)果:

4

0

運(yùn)行次數(shù)為 100 時(shí),運(yùn)行結(jié)果:

16

1

運(yùn)行次數(shù)為1000時(shí),運(yùn)行結(jié)果:

111

8

運(yùn)行次數(shù)為10000時(shí),運(yùn)行結(jié)果:

343

11

運(yùn)行次數(shù)為100000時(shí),運(yùn)行結(jié)果:

841

65

運(yùn)行次數(shù)為一千萬(wàn)時(shí),運(yùn)行結(jié)果:

8205

94

我們知道,匹配正則表達(dá)式首先創(chuàng)建有窮自動(dòng)機(jī)

我的結(jié)論:從測(cè)試記過(guò)可以看出String.matches()方法的時(shí)間并不是想想中的線性增長(zhǎng)的,可以得出的結(jié)論是jvm一定對(duì)String.matches()方法進(jìn)行了緩存的處理,也就是說(shuō)調(diào)用這個(gè)方法產(chǎn)生的一切中間對(duì)象并未被jvm清理,如果運(yùn)用到你的應(yīng)用上,可能效率體現(xiàn)得會(huì)很明顯

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

寫完以上內(nèi)容,還在我洋洋自得的時(shí)候,我想看一下String.matches()的源代碼:

public boolean matches(String regex) {

return Pattern.matches(regex, this);

}

public static boolean matches(String regex, CharSequence input) {

Pattern p = Pattern.compile(regex);

Matcher m = p.matcher(input);

return m.matches();

}

看來(lái)我對(duì)jvm的上方理解是錯(cuò)誤的,

不過(guò)從他們的源碼我們可以看出來(lái),如果把Pattern寫成一個(gè)靜態(tài)(static)屬性,并用spring管理對(duì)象,那效率還是會(huì)提高很多的!

望共勉!

總結(jié)

以上是生活随笔為你收集整理的java正则效率_善用Pattern提高你的应用处理正则表达式的效率(Java)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。