java正则效率_善用Pattern提高你的应用处理正则表达式的效率(Java)
舉個(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 应理解计算机专业的学科特点,职业高中计算
- 下一篇: java反射 获取参数类型_Java反射