置頂隨筆

          呵呵~放一個(gè)專業(yè)一點(diǎn)的blog在這邊吧,討論一下EJB3,AJAX,SWT等等拉
          posted @ 2006-10-24 15:51 展昭 閱讀(288) | 評(píng)論 (0)編輯 收藏

          2006年11月16日

          近來(lái)需要寫一些JSF的Validator,于是想起來(lái)用正則表達(dá)式,果然是書到用時(shí)方恨少,居然除了[a-z]?,\d 這些以外什么都想不起來(lái)了。
          上網(wǎng)找尋了一些資料如下:

          ?匹配中文字符的正則表達(dá)式: [\u4e00-\u9fa5]

          匹配雙字節(jié)字符(包括漢字在內(nèi)):[^\x00-\xff]

          應(yīng)用:計(jì)算字符串的長(zhǎng)度(一個(gè)雙字節(jié)字符長(zhǎng)度計(jì)2,ASCII字符計(jì)1)

          String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;}

          匹配空行的正則表達(dá)式:\n[\s| ]*\r

          匹配HTML標(biāo)記的正則表達(dá)式:/<(.*)>.*<\/\1>|<(.*) \/>/

          匹配首尾空格的正則表達(dá)式:(^\s*)|(\s*$)

          應(yīng)用:javascript中沒(méi)有像vbscript那樣的trim函數(shù),我們就可以利用這個(gè)表達(dá)式來(lái)實(shí)現(xiàn),如下:

          String.prototype.trim = function()
          {
          return this.replace(/(^\s*)|(\s*$)/g, "");
          }

          利用正則表達(dá)式分解和轉(zhuǎn)換IP地址:

          下面是利用正則表達(dá)式匹配IP地址,并將IP地址轉(zhuǎn)換成對(duì)應(yīng)數(shù)值的Javascript程序:

          function IP2V(ip)
          {
          re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正則表達(dá)式
          if(re.test(ip))
          {
          return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
          }
          else
          {
          throw new Error("Not a valid IP address!")
          }
          }

          不過(guò)上面的程序如果不用正則表達(dá)式,而直接用split函數(shù)來(lái)分解可能更簡(jiǎn)單,程序如下:

          var ip="10.100.20.168"
          ip=ip.split(".")
          alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

          匹配Email地址的正則表達(dá)式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

          匹配網(wǎng)址URL的正則表達(dá)式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?

          利用正則表達(dá)式去除字串中重復(fù)的字符的算法程序:[注:此程序不正確,原因見(jiàn)本貼回復(fù)]

          var s="abacabefgeeii"
          var s1=s.replace(/(.).*\1/g,"$1")
          var re=new RegExp("["+s1+"]","g")
          var s2=s.replace(re,"")
          alert(s1+s2) //結(jié)果為:abcefgi

          我原來(lái)在CSDN上發(fā)貼尋求一個(gè)表達(dá)式來(lái)實(shí)現(xiàn)去除重復(fù)字符的方法,最終沒(méi)有找到,這是我能想到的最簡(jiǎn)單的實(shí)現(xiàn)方法。思路是使用后向引用取出包括重復(fù)的字符,再以重復(fù)的字符建立第二個(gè)表達(dá)式,取到不重復(fù)的字符,兩者串連。這個(gè)方法對(duì)于字符順序有要求的字符串可能不適用。

          得用正則表達(dá)式從URL地址中提取文件名的javascript程序,如下結(jié)果為page1

          s="http://www.9499.net/page1.htm"
          s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
          alert(s)

          利用正則表達(dá)式限制網(wǎng)頁(yè)表單里的文本框輸入內(nèi)容:

          用正則表達(dá)式限制只能輸入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"

          用正則表達(dá)式限制只能輸入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"

          用正則表達(dá)式限制只能輸入數(shù)字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

          用正則表達(dá)式限制只能輸入數(shù)字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"


          同時(shí)找到一個(gè)可以測(cè)試正則表達(dá)式的正確性的小軟件,很不錯(cuò),居然可以語(yǔ)法高亮。不過(guò)說(shuō)實(shí)話正則表達(dá)式寫出來(lái)亂七八糟的,就算有分色顯示看起來(lái)也好不到哪里去。。。。。。

          MTracer 下載
          posted @ 2006-11-16 15:46 展昭 閱讀(834) | 評(píng)論 (1)編輯 收藏

          2006年11月2日

          前提是該范型中包含的對(duì)象Object已經(jīng)實(shí)現(xiàn)了Collections.sort()要求的接口:
          public int compareTo(Object o)

          這個(gè)compareTo的方法應(yīng)當(dāng)直接的表現(xiàn)出你想要以O(shè)bject的哪個(gè)字段進(jìn)行排序
          我們可以這樣寫:
          public int compareTo(Object o) {
          ??????? DbPoJo po = null;
          ??????? if(o instanceof DbPoJo)
          ??????????? po = (DbPoJo)o;
          ??????? return po.getId().compareTo(this.getId());
          }
          假設(shè)我們的List中包含的每個(gè)元素都是 DbPoJo 這個(gè)對(duì)象,在這里需要先將Object強(qiáng)制轉(zhuǎn)換為DbPoJo
          然后就可以利用String的compareTo()方法來(lái)進(jìn)行返回

          最后,對(duì)我們的List :List<DbPoJo> returnList = new ArrayList<DbPoJo>();
          通過(guò)調(diào)用Collections的靜態(tài)方法 sort() 進(jìn)行排序:
          Collections.sort(returnList);

          通過(guò)上例,可以看出一個(gè)類一旦實(shí)現(xiàn)Comparable接口,那么它就可以跟很多依賴于該接口的集合進(jìn)行協(xié)作。
          用《Effective JAVA 》的話來(lái)說(shuō):你可以以很小的努力,來(lái)獲得非常強(qiáng)大的功能

          posted @ 2006-11-02 12:16 展昭 閱讀(2045) | 評(píng)論 (3)編輯 收藏

          2006年10月25日

          ·@PostConstruct:當(dāng)bean對(duì)象完成實(shí)例化后,使用了這個(gè)注釋的方法會(huì)被立即調(diào)用。這個(gè)注釋同時(shí)適用于
          有狀態(tài)和無(wú)狀態(tài)的會(huì)話bean。

          ·@PreDestroy:使用這個(gè)注釋的方法會(huì)在容器從它的對(duì)象池中銷毀一個(gè)無(wú)用的或者過(guò)期的bean 實(shí)例之前調(diào)
          用。這個(gè)注釋同時(shí)適用于有狀態(tài)和無(wú)狀態(tài)的會(huì)話bean。

          ·@PrePassivate:當(dāng)一個(gè)有狀態(tài)的session bean實(shí)例空閑過(guò)長(zhǎng)的時(shí)間,容器將會(huì)鈍化(passivate)它,并把它的
          狀態(tài)保存在緩存當(dāng)中。使用這個(gè)注釋的方法會(huì)在容器鈍化bean實(shí)例之前調(diào)用。這個(gè)注釋適用于有狀態(tài)的會(huì)話bean。
          當(dāng)鈍化后,又經(jīng)過(guò)一段時(shí)間該bean 仍然沒(méi)有被操作,容器將會(huì)把它從存儲(chǔ)介質(zhì)中刪除。以后,任何針對(duì)該bean
          方法的調(diào)用容器都會(huì)拋出例外。

          ·@PostActivate:當(dāng)客戶端再次使用已經(jīng)被鈍化的有狀態(tài)session bean時(shí),新的實(shí)例被創(chuàng)建,狀態(tài)被恢復(fù)。
          使用此注釋的session bean會(huì)在bean的激活完成時(shí)調(diào)用。這個(gè)注釋只適用于有狀態(tài)的會(huì)話bean。

          ·@Init:這個(gè)注釋指定了有狀態(tài)session bean初始化的方法。它區(qū)別于@PostConstruct注釋在于:多個(gè)@Init
          注釋方法可以同時(shí)存在于有狀態(tài)session bean 中,但每個(gè)bean實(shí)例只會(huì)有一個(gè)@Init注釋的方法會(huì)被調(diào)用。這取
          決于bean是如何創(chuàng)建的(細(xì)節(jié)請(qǐng)看EJB 3.0規(guī)范)。@PostConstruct在@Init之后被調(diào)用。

          另一個(gè)有用的生命周期方法注釋是@Remove,特別是對(duì)于有狀態(tài)session bean。當(dāng)應(yīng)用通過(guò)存根對(duì)象調(diào)用使用了
          @Remove注釋的方法時(shí),容器就知道在該方法執(zhí)行完畢后,要把bean實(shí)例從對(duì)象池中移走。

          我寫了一個(gè)statful Session bean.需要等待9分鐘左右,容器才會(huì)鈍化此會(huì)話Bean。。。。。
          然后經(jīng)證明,statfulBean的鈍化時(shí)間是10分鐘,完全銷毀差不多要15分鐘。。。Jboss是個(gè)愚蠢的東西
          還沒(méi)有找到相應(yīng)的文檔說(shuō)明這一問(wèn)題的,因?yàn)殁g化后GC不會(huì)馬上來(lái)收,這就導(dǎo)致可能會(huì)有潛在的內(nèi)存泄露問(wèn)題了。

          我只用到JBoss,不知道有沒(méi)有用Weblogic的朋友是不是也有同樣的問(wèn)題?
          posted @ 2006-10-25 09:07 展昭 閱讀(1366) | 評(píng)論 (2)編輯 收藏

          2006年10月24日

          JAVA5提出的新思想,基于新的for循環(huán)結(jié)構(gòu):for(String str : strList){ ... }所產(chǎn)生了一系列的新奇東東,包括范型Collection<Object> ,還有可變參數(shù) 等等
          不過(guò)我覺(jué)得可能是Collection的范型支持先出現(xiàn),然后才引入了這種迭代結(jié)構(gòu)

          可變參數(shù)倒是比其中一個(gè)較好玩的東西:
          ?1public?class?test_varargs?{
          ?2????public?static?void?varargs(String??str){
          ?3????/*?
          ?4????????這里str參數(shù)前面有三個(gè).?表示str為可變參數(shù)
          ?5????????程序處理時(shí)隱式的把str看作是str[]
          ?6????????所以下面可以用處理數(shù)組的方法處理參數(shù)
          ?7????*/

          ?8????????for(String?strTmp:str){
          ?9????????????System.out.println("參數(shù)::"+strTmp);
          10????????}

          11????}
          ????
          12????public?static?void?main(String[]?args)?{
          13????????varargs("1:Hello","eqwe","ewq12123","ccccc");
          14????}

          15}

          像上面的這樣,可變參數(shù)就是在普通的參數(shù)后面加上三個(gè)"."。

          我沒(méi)有發(fā)現(xiàn)可變參數(shù)有什么太大的用處,在J2EE的框架開(kāi)發(fā)中幾乎用不到,不過(guò)當(dāng)有時(shí)候我們不確定參數(shù)到底有幾個(gè)時(shí)倒是可以用這種方式來(lái)代替以往傳遞一個(gè)數(shù)組的方式。

          可變參數(shù)同時(shí)可以跟固定的參數(shù)混合使用。
          但同時(shí)可變參數(shù)有一些限制:一個(gè)方法的參數(shù)中不能同時(shí)擁有2種類型的可變參數(shù),也就是說(shuō):
          public void foo(String ... str,Integer ... i)這樣是不行的
          posted @ 2006-10-24 16:09 展昭 閱讀(3962) | 評(píng)論 (8)編輯 收藏
           
          呵呵~放一個(gè)專業(yè)一點(diǎn)的blog在這邊吧,討論一下EJB3,AJAX,SWT等等拉
          posted @ 2006-10-24 15:51 展昭 閱讀(288) | 評(píng)論 (0)編輯 收藏
          僅列出標(biāo)題  
           
          主站蜘蛛池模板: 乐都县| 康马县| 孟村| 雷波县| 潜山县| 乌兰察布市| 容城县| 格尔木市| 辉南县| 荆门市| 佛坪县| 积石山| 建瓯市| 遂昌县| 南充市| 丹巴县| 壤塘县| 新田县| 中方县| 辉县市| 郯城县| 西峡县| 潜山县| 时尚| 高陵县| 淅川县| 江油市| 庆安县| 林芝县| 青川县| 即墨市| 青海省| 新蔡县| 内丘县| 禹城市| 贞丰县| 延川县| 南和县| 台州市| 安庆市| 兴化市|