amp@java

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            99 隨筆 :: 0 文章 :: 228 評論 :: 0 Trackbacks

          2016年1月12日 #

          當(dāng)年是從CSDN博客遷過來的,因?yàn)槟抢锖懿环€(wěn)定,那時候這里很火的;
          前段時間發(fā)現(xiàn),Blogjava的登錄頁面居然沒有驗(yàn)證碼了,圖片顯示錯誤,無法登錄,預(yù)感這個地方要涼,只好到處找替代,但沒找到好用的博客,github是一個選項(xiàng),但似乎不是很適合做博客。
          現(xiàn)在終于又可以登錄了,不過首頁居然只剩一篇文章,我以為數(shù)據(jù)都沒了,登錄發(fā)現(xiàn)還是有的,不過太讓人不放心了。
          posted @ 2018-08-18 22:14 amp@java 閱讀(148) | 評論 (0)編輯 收藏

           昨天下午開始,之前用得好好的USB鼠標(biāo),突然不能用了,找到個PS/2鼠標(biāo),卻發(fā)現(xiàn)主板沒有鼠標(biāo)的PS/2口,只有鍵盤的PS/2口,真是奇葩,幸好在用的鍵盤是PS/2口的,費(fèi)了九牛二虎之力,用鍵盤操作,Win+R,compmgmt.msc進(jìn)入計(jì)算機(jī)管理,上下箭頭移到設(shè)備管理器,發(fā)現(xiàn)右邊的USB控制器前全是黃色嘆號,嘗試卸載再安裝,卻怎么也裝不上,重新啟動發(fā)現(xiàn)鼠標(biāo)在啟動Windows前還是亮燈的,但到了顯示W(wǎng)indows徽標(biāo)的時候燈就滅了,應(yīng)該不是硬件問題,而是驅(qū)動問題。
          為了進(jìn)一步證實(shí)硬件沒問題,找了個安裝系統(tǒng)的U盤,插進(jìn)去啟動,能夠正常使用鼠標(biāo),于是目標(biāo)就聚焦在找回驅(qū)動上。
          開始折騰:
          1、首先是找官方驅(qū)動啊,我這電腦是老機(jī),AMD7系列主板,找了半天,這個主板驅(qū)動并沒有包含USB控制器,因?yàn)閁SB控制器都是Windows自帶的驅(qū)動,下載了一個南橋驅(qū)動,安裝后并沒有效果;
          2、Windows自帶的驅(qū)動原來都是放在C:\Windows\System32\DriverStore\FileRepository下,USB控制器相關(guān)的驅(qū)動,就在usbport.inf_amd64_xxxxxxxxxx文件夾里,xxxxxxxxx是一串16進(jìn)制數(shù)字,悲催的是,安裝這個驅(qū)動時要不提示找不到指定文件,要不說第三方INF沒有簽名;
          3、自己折騰搞不定,找個軟件吧,第一個想到的是驅(qū)動之家官方的驅(qū)動精靈,下載下來發(fā)現(xiàn)是個全家桶啊,什么騰訊管家,金山毒霸,瀏覽器首頁修改一應(yīng)俱全,而且沒有鼠標(biāo)點(diǎn)擊,用TAB鍵根本移動不到取消框,只好默認(rèn)全部安裝了,裝完啟動,檢測,提示系統(tǒng)自帶驅(qū)動缺失,于是回車修復(fù),但每次修復(fù)完,重新檢測還是那樣,而且沒有提示USB控制器驅(qū)動安裝有問題,有些功能用鍵盤無法操作,不知道是不是還有哪里可以操作一下,于是又搜了一下,如何用鍵盤代替鼠標(biāo),居然真的找到了!
          4、按WIN鍵,輸入設(shè)置,回車,打開設(shè)置主頁:

          移到“輕松使用”,進(jìn)去后左邊選擇“鼠標(biāo)”,在右邊啟用“使用數(shù)字小鍵盤在屏幕上移動鼠標(biāo)”(按空格鍵開關(guān)),最好把三個開關(guān)都打開,如果沒有啟用CTRL鍵加速功能,鼠標(biāo)移動非常慢:

          好了,現(xiàn)在可以用小鍵盤移動鼠標(biāo)了;
          5、繼續(xù)回到驅(qū)動精靈,再次修復(fù),還是不行啊,這個東西除了帶來一堆垃圾,什么作用都沒有!于是把它帶來的垃圾以及它自己卸載了。
          6、似乎360也有一個驅(qū)動大師,于是就下載了一個,這個倒是很純潔,但是功能太弱,完全沒發(fā)現(xiàn)問題;
          7、剛才搜索“安裝驅(qū)動 找不到指定的文件”時,發(fā)現(xiàn)一個論壇提到了這個,是驅(qū)動人生的論壇,好像還有解決方案,但要注冊才能下載,難道驅(qū)動人生可以解決?于是就下載了一個驅(qū)動人生,安裝的時候還是附帶全家桶,不過現(xiàn)在可以用鍵盤移動鼠標(biāo)取消了,只安裝了驅(qū)動人生自己,跟剛才兩個軟件不同的是,它提示USB外設(shè)驅(qū)動沒有安裝,于是點(diǎn)修復(fù),結(jié)果反反復(fù)復(fù)出現(xiàn)等待光標(biāo),就是無法完成;
          8、之前又搜索到,驅(qū)動安裝的日志在C:\Windows\INF\setupapi.dev.log文件里,于是打開這個文件,發(fā)現(xiàn)Driver package failed signature verification. Error = 0xE000022F,驅(qū)動程序簽名有問題,所以不能安裝成功;
          9、Windows10有個高級啟動選項(xiàng)是禁用強(qiáng)制驅(qū)動簽名,如何進(jìn)入高級啟動選項(xiàng)呢?以前是按F8,現(xiàn)在不行了,要在設(shè)置里面,更新和安全,恢復(fù),高級啟動,立即重啟,然后設(shè)置疑難解答,高級啟動,再重啟,就可以進(jìn)入高級啟動菜單,按7進(jìn)入禁止強(qiáng)制驅(qū)動簽名模式,重啟后再用驅(qū)動人生修復(fù),果然成功了;
          10、打開驅(qū)動人生下載目錄,DTLFolder\DriversDownLoad,發(fā)現(xiàn)它下載了USB驅(qū)動目錄是USB_10.0.10240.16384_WHQL_107049,里面文件如下:

          除了第一個xml文件是程序自己用的外,其他都是USB驅(qū)動用到的文件,點(diǎn)右鍵發(fā)現(xiàn)那幾個sys文件,除了usbohci.sys和usbuhci.sys外,其他都有數(shù)字簽名,而usbuhci.sys我這里沒用到,問題就出在usbohci.sys上:


          11、難道是驅(qū)動人生替換了未簽名的文件?圖謀不軌?為了驗(yàn)證一下,我又下載了一個Windows10安裝光盤(版本是當(dāng)前使用的1703版):
          cn_windows_10_multiple_editions_version_1703_updated_march_2017_x64_dvd_10194190.iso
          12、怎么提取安裝光盤中的內(nèi)置驅(qū)動?找了一下,原來Windows的安裝盤從VISTA起,不再使用XP以前的I386目錄和Drivers.cab文件存放驅(qū)動,而是打包在一個Install.wim鏡像文件中,要找到驅(qū)動文件,必須用工具提取,這個工具就是Imagex.exe,微軟自己做的命令行工具,但是我的電腦上沒有,于是下載了一個64位的,放在C盤根目錄,通過如下命令即可提取:
          c:\IMAGEX_x64 /mount f:\sources\install.wim 5 i:\1703
          其中F盤是在iso文件上點(diǎn)右鍵,打開方式選“Windows資源管理器”打開后虛擬出來的盤符,其實(shí)就相當(dāng)于系統(tǒng)自帶的虛擬光驅(qū),I盤是硬盤,用來存放掛載的鏡像文件,5是選擇掛載哪一個版本的Windows(多合一版),如果不知道要掛哪個,把這個數(shù)字改成100,會顯示xml文件內(nèi)容,并提示找不到這個索引號,從xml文件內(nèi)容就能找到各版本的信息,然后再重新掛載正確的即可。這個掛載其實(shí)是個解壓縮過程,時間很長,提取完之后就跟安裝好了Windows一樣,目錄都列好了。
          今天又發(fā)現(xiàn)另一個圖形化的工具,Dism++,比這個操作更簡單。Dism是PowerShell內(nèi)置的命令,也是與鏡像有關(guān),也能掛載提取,但用了一下似乎提示權(quán)限有問題,Dism++是國內(nèi)開源愛好者自己開發(fā)的圖形化工具,與Dism沒有關(guān)系。
          13、好了,原版的Windows已經(jīng)準(zhǔn)備好,進(jìn)入Windows\System32\DriverStore\FileRepository目錄,搜索usbohci.sys,在usbport.inf_amd64_8e5f608c0111283d目錄下,點(diǎn)右鍵一看,也是沒簽名的:
          這不是坑爹嗎?你自己帶的東西都沒簽名,然后又不給用!!!!
          14、有點(diǎn)懷疑是Windows自己更新的時候修改了一些策略,導(dǎo)致之前可以用的不能用了,為了再次驗(yàn)證,又繼續(xù)下載了兩個版本的Windows10安裝光盤,分別是早期的1607和最新的1709,找到usbohci.sys,如下所示:
          從左到右依次為1607,1703,1709,均未簽名,基本可以判斷是Windows自己抽風(fēng)了。
          15、昨天晚上搞到12點(diǎn)多,搞定鼠標(biāo)后沒有重啟測試,今天早上開機(jī),果然發(fā)現(xiàn)鼠標(biāo)又不能用了,因?yàn)槲覜]有選擇禁用強(qiáng)制簽名選項(xiàng)來啟動,系統(tǒng)發(fā)現(xiàn)那個沒簽名的驅(qū)動,就把它停了,嘗試卸載,結(jié)果再裝也裝不上,于是只好又設(shè)置高級啟動,重新禁止強(qiáng)制簽名,進(jìn)入系統(tǒng),裝上驅(qū)動,恰好這時Windows又在后臺偷偷摸摸地更新,不知道更新了啥,讓我重啟。
          16、重啟之后,奇跡出現(xiàn),剛才明明提示沒有簽名強(qiáng)制安裝的驅(qū)動,現(xiàn)在居然正常啟動也沒問題了,而且查看驅(qū)動詳情的時候出現(xiàn)了矛盾的一幕:
          外面顯示數(shù)字簽名者:未經(jīng)數(shù)字簽名,里面的sys文件又顯示數(shù)字簽名者是Microsoft Windows,然而進(jìn)入C:\Windows\System32\drivers目錄,找到usbohci.sys,點(diǎn)右鍵,卻發(fā)現(xiàn)并沒有數(shù)字簽名:
          好吧,你開心就好,反正不要再禁我的鼠標(biāo)就行……
          感謝這次蛋疼的折騰之旅,讓我知道了驅(qū)動程序來自哪里,安裝日志在哪里,哪個軟件坑爹又沒用,怎么玩安裝盤,怎么用鍵盤操作鼠標(biāo),怎么進(jìn)入高級啟動界面……
          我為什么要知道這些??????????????為微軟的疏忽買單啊!!!!!
          啥都不說了,它又提示我重啟了,不知道又有什么奇跡會發(fā)生……
          posted @ 2017-11-19 12:43 amp@java 閱讀(1156) | 評論 (0)編輯 收藏

           每次換手機(jī),把舊手機(jī)的數(shù)據(jù)遷移到新手機(jī)就是個很麻煩的事情,幸好最近華為的“手機(jī)克隆”APP越來越強(qiáng)大,居然能夠把微信的聊天記錄包括圖片原封不動地遷移到新手機(jī)上,以前用微信自帶的聊天記錄轉(zhuǎn)移功能只能轉(zhuǎn)移文字信息,圖片視頻全部丟失,不知道現(xiàn)在的怎么樣。手機(jī)克隆還能把SD卡的內(nèi)容也轉(zhuǎn)移過來,基本滿足了需要。
          但是要把手機(jī)上的東西傳到電腦就沒那么簡單了,現(xiàn)在已經(jīng)沒有了以前的大容量存儲模式,只能選擇MTP模式,這種模式其實(shí)不是一個完整的文件系統(tǒng),有很多限制,所以一些傳統(tǒng)的軟件讀取不到,例如FastCopy是用不了的,用Windows自帶的文件管理器來復(fù)制,開始計(jì)算時間就要等很久,中間出了個錯就前功盡棄;還有通過手機(jī)上的APP訪問電腦共享的方式,在手機(jī)上復(fù)制也可以,但是同樣會莫名其妙卡死,F(xiàn)TP同理,折騰了好久,還是覺得自己動手比較好。
          MTP協(xié)議在維基百科里解釋得比較清楚:https://en.wikipedia.org/wiki/Media_Transfer_Protocol ,簡單點(diǎn)說就是:
          1、不是以塊設(shè)備的形式訪問,跟U盤不同;
          2、只能單線程訪問,不能同時進(jìn)行多個操作,只能一個接一個;
          3、控制權(quán)在設(shè)備上,對外展示的內(nèi)容由設(shè)備決定;
          4、默認(rèn)不能直接對文件進(jìn)行部分修改,只能復(fù)制過來修改完再復(fù)制回去,但Android對協(xié)議做了擴(kuò)展,能夠修改部分文件內(nèi)容;
          5、在Linux上有些軟件能夠把它掛載為文件系統(tǒng),這樣其他軟件就能像訪問普通文件系統(tǒng)一樣訪問了,但是Windows下似乎沒有。

          不過有人開發(fā)了一個在Windows下通過JNI實(shí)現(xiàn)的Java庫jmtp,項(xiàng)目托管在Google Code,被墻了,但是GitHub有人fork了一個,可以下載下來,我下載的是https://github.com/reindahl/jmtp
          里面包含了C++的代碼和Java的代碼,以及兩個已經(jīng)編譯好的dll文件,分別用于Win32和Win64,把其中一個dll文件放在工程目錄下,再把Java源代碼加入工程中即可使用,文檔比較簡陋,但是看test目錄下的MtpTest.java,基本可以摸到如何使用了,這個協(xié)議比較簡單,其實(shí)沒什么功能,我要的只是把文件復(fù)制到電腦上。
          根據(jù)MtpTest.java,稍微修改一下,做個遞歸復(fù)制即可把手機(jī)上的所有文件復(fù)制到電腦上:
          package test;

          import java.io.File;
          import java.io.FileWriter;
          import java.io.IOException;
          import java.math.BigInteger;
          import java.nio.file.Files;
          import java.nio.file.Path;
          import java.nio.file.Paths;
          import java.rmi.server.SocketSecurityException;
          import java.util.ArrayList;


          import jmtp.PortableDevice;
          import jmtp.PortableDeviceFolderObject;
          import jmtp.PortableDeviceManager;
          import jmtp.PortableDeviceObject;
          import jmtp.PortableDeviceStorageObject;


          public class TestApp {

             

              
          public static void main(String[] args) {
                  
          // TODO Auto-generated method stub
                  
                  ArrayList
          <PortableDeviceStorageObject> devices = new ArrayList<>();

                  PortableDeviceManager manager 
          = new PortableDeviceManager();

                  
          for (PortableDevice device : manager) {
                      System.out.println(device);
                      device.open();
                      
                      
          // Iterate over deviceObjects
                      for (PortableDeviceObject object : device.getRootObjects()) {
                          String storageName
          =object.getName();
                          System.out.println(storageName);

                          
          // If the object is a storage object
                          if (object instanceof PortableDeviceStorageObject) {
                              PortableDeviceStorageObject storage 
          = (PortableDeviceStorageObject) object;
                              System.out.println(storage.getChildObjects().length);
                              
          for (PortableDeviceObject child : storage.getChildObjects()) {
                                      copyall(child,
          "E:\\手機(jī)備份\\"+object.getName());
                              }
                          }
                      }

                      device.close();
                      System.out.println(size);
                  }

            
            
              }
              
              
          public static void copyall(PortableDeviceObject obj,String path) {

                  if(obj instanceof PortableDeviceFolderObject) {
                    

                      String objName=obj.getName();
                      
          if(objName.contains(":")) {
                          objName
          =objName.replace(':''');
                      }
                      String newPath 
          = path+"\\"+objName;
                      System.out.println(
          "創(chuàng)建文件夾:"+newPath);
                      
                      File file = new File(newPath);
                      if(!file.exists()) {
                          file.mkdirs();
                      }
                      for(PortableDeviceObject subObj:((PortableDeviceFolderObject) obj).getChildObjects()) {             
                          copyall(subObj,newPath);
                      }
                  }
                  
          else {      
                      
          if(obj.getName().contains(":"))
                          
          return;
                      System.out.println(
          "開始復(fù)制文件到:"+path+"\\"+obj.getName());
                      File file 
          = new File(path);
                      obj.copy(file.toPath());                     
                      System.out.println(
          "文件復(fù)制完成!");
                  }
              }

          }
          其中發(fā)現(xiàn)有點(diǎn)問題:
          1、Android設(shè)備文件名里是可以包含冒號(:)的,但Windows是不可以的,所以復(fù)制到這些文件的時候會有問題,于是遇到目錄名這樣就把它改為中文的冒號(:),但是遇到文件名這樣就不行了,因?yàn)檫@個庫的copy函數(shù)只需要指定目標(biāo)目錄,不需要指定目標(biāo)文件名,所以這些文件只能放棄;
          2、Android手機(jī)的MTP協(xié)議是由“媒體存儲”這個系統(tǒng)APP控制的,有時候手機(jī)上可以看到的文件,通過MTP訪問卻怎么也看不到,重啟手機(jī)也不行,應(yīng)該就是這個APP沒有更新數(shù)據(jù),需要把它的系統(tǒng)數(shù)據(jù)清除掉,等它重建完重新訪問就可以看到了,不過這個重建時間非常長,可以查看它數(shù)據(jù)占用的空間,剛清除之后會發(fā)現(xiàn)它占用的空間會不斷增長,到了不增長的時候就是重建完了,就可以正常訪問了;
          3、這個庫有時候還有點(diǎn)bug,有一次發(fā)現(xiàn)它讀取到的文件和文件夾都沒有了最后一個.后面的部分,所以總是卡住,重新插拔一下手機(jī)數(shù)據(jù)線又沒問題了;
          4、為了避免復(fù)制了半天結(jié)果發(fā)現(xiàn)不完整,又要重來,最好在復(fù)制前先統(tǒng)計(jì)一下文件大小,看看跟手機(jī)上看到的占用存儲空間是不是一致,對于MTP設(shè)備上的文件,可以通過getSize函數(shù)得到大小,把上面復(fù)制操作改為大小累加即可,速度比復(fù)制快一些,不過由于小文件太多,也不會快很多。

          把手機(jī)里的文件復(fù)制到電腦后,通過一些簡單的分析,發(fā)現(xiàn)有很多其實(shí)是垃圾來的,也可以為手機(jī)空間清理提供參考,因?yàn)樵陔娔X上分析起來比在手機(jī)上方便一些。例如一些視頻APP的緩存,居然超過1G,占用了寶貴的內(nèi)部存儲空間,之前一直都沒發(fā)現(xiàn),通過電腦里的按文件大小搜索才發(fā)現(xiàn)。
          posted @ 2017-11-17 14:54 amp@java 閱讀(2255) | 評論 (0)編輯 收藏

          09款老速騰,不支持USB和AUX,要聽歌除了CD以外,就是刻錄在CD上的MP3了,以前不知道用什么軟件刻錄了一張碟,能夠完美地顯示中文文件名和ID3信息,前幾天用ImgBurn刻了一張,發(fā)現(xiàn)中文是亂碼,開始以為是ID3信息顯示亂碼,于是下載了一個Mp3Tag,把所有ID3信息都清除,結(jié)果顯示文件名依然亂碼,重新寫入ID3信息,發(fā)現(xiàn)ID3可以正常顯示,但文件名還是亂碼。
          于是就把原來那張可以正常顯示中文的碟拿來研究一下,發(fā)現(xiàn)它的ID3標(biāo)簽只是ID3v1,而后來重新寫入的ID3是ID3v2.3,兩個都可以正常顯示中文,說明ID3信息是正常的,文件名亂碼不是這個問題。
          但是不知道用什么軟件來顯示光盤的文件系統(tǒng),只能一次次摸索。
          幸好有一張CD-RW可以反復(fù)嘗試。
          ImgBurn默認(rèn)是使用ISO9660+UDF,而ISO 9660則使用最老的ISO 9660文件系統(tǒng),也就是1988版本,文件名默認(rèn)是不支持中文的,不知道是不是這個原因,于是就把文件系統(tǒng)改為ISO 9660+Joliet,如下圖:

          并且把ISO 9660標(biāo)準(zhǔn)改為1999:

          可能是因?yàn)樽址幋a那里改為了ASCII,所以就好了。
          后來又嘗試只使用UDF文件系統(tǒng),結(jié)果認(rèn)不出碟。



          所以,目前能夠使用中文的環(huán)境其實(shí)就是:
          ImgBurn使用ISO 9660 1999標(biāo)準(zhǔn);
          ID3使用v1或v2.3都可以。

          posted @ 2017-02-10 09:17 amp@java 閱讀(402) | 評論 (0)編輯 收藏

          最近新部署了一個信息系統(tǒng),廠家居然沒有升級方案,所有數(shù)據(jù)都要重新輸入,包括用戶、角色等都要重新配置,真是操蛋。要是一個個錄入簡直是日狗了,這些用戶在其他信息系統(tǒng)早已存在,但是每個都復(fù)制粘貼提交一遍也不是辦法,于是就想用程序自動完成這些操作。步驟如下:
          1、從其他信息系統(tǒng)的數(shù)據(jù)庫導(dǎo)出用戶信息,也可以直接從其他信息系統(tǒng)的界面把所有用戶信息復(fù)制下來放在一個文本文件里,反正就是準(zhǔn)備好數(shù)據(jù)源;
          2、在需要錄入用戶信息的系統(tǒng)中,用人工操作的方式登錄系統(tǒng),并錄入一個用戶,同時用Wireshark抓包,查看整個過程要提交一些什么樣的表單數(shù)據(jù);
          3、在程序中用httpclient提交同樣的數(shù)據(jù),完成登錄,并從第1步的數(shù)據(jù)源中讀取用戶信息,然后循環(huán)提交錄入用戶所需的數(shù)據(jù),完成用戶的錄入;
          4、新系統(tǒng)沒有默認(rèn)的用戶角色,是需要一個個修改的,是根據(jù)用戶的ID來確定當(dāng)前修改的用戶,并且提交一個角色I(xiàn)D來進(jìn)行設(shè)定,因此需要首先獲取用戶的ID,然后根據(jù)該ID來提交角色I(xiàn)D,而用戶ID是通過用戶列表頁面獲取到的,因此還需要通過正則表達(dá)式來獲取所有用戶的ID,然后循環(huán)提交角色I(xiàn)D,完成角色設(shè)定。

          花了不少時間才搞定,有幾個地方需要注意:
          1、如果表單數(shù)據(jù)不包含中文,直接把表單的Name和Value加在HttpPost的URL的?后面即可,不需要專門建立NameValuePair,如下所示:
          HttpPost httppost = new HttpPost("http://1.1.1.1/test/adduser?userid=abc&username=efg");
          httpclient.execute(httppost);

          但是,如果表單數(shù)據(jù)包含中文,例如姓名,用這種方式提交的表單數(shù)據(jù)會出現(xiàn)亂碼,即使通過URLEncoder進(jìn)行編碼后再發(fā)也不行,必須建立NameValuePair,再加到HttpPost的Entity里面,如下所示:
          HttpPost httppost = new HttpPost("http://1.1.1.1/test/adduser?userid=abc");
          List
          <NameValuePair> nvps = new ArrayList<NameValuePair>();
          nvps.add(
          new BasicNameValuePair("username","張三"));
          httppost.setEntity(
          new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
          httpclient.execute(httppost);

          2、用于網(wǎng)頁內(nèi)容查找的正則表達(dá)式的使用方式一般為:
          Pattern p = Pattern.compile(".*?abc(whattoget)123.*?");
          Matcher m = p.matcher(line);
          if(m.matches()){
               String whattoget 
          = m.group(1);
          }
          ".*?abc(whattoget)123.*?"就是一個正則表達(dá)式,如果用于匹配一行的時候,由于要查找的內(nèi)容是在行中間,所以前后需要加上.*?,表示前后可以是任意字符,也可以什么都沒有,而表達(dá)式中間的(whattoget)就表示一個group,編號為1,編號為0的group是整個匹配的字符串,找到之后提取group(1)即可得到想要的內(nèi)容。
          測試正則表達(dá)式是一項(xiàng)很麻煩的工作,不過有個很好的軟件可以完成此工作:RegexBuddy,支持各種語言的正則表達(dá)式的調(diào)試。
          學(xué)習(xí)正則表達(dá)式的寶典是《Mastering Regular Expression》。
          posted @ 2016-01-12 15:54 amp@java 閱讀(3574) | 評論 (1)編輯 收藏

          主站蜘蛛池模板: 车险| 昆明市| 库尔勒市| 承德县| 新安县| 澄城县| 凭祥市| 巴南区| 迁西县| 思茅市| 平塘县| 晋江市| 阿拉善左旗| 南华县| 上饶市| 磐石市| 班玛县| 五莲县| 巴马| 宝丰县| 黄大仙区| 红安县| 阿鲁科尔沁旗| 收藏| 合肥市| 资中县| 玉门市| 长岛县| 岑溪市| 江达县| 江源县| 浦江县| 绥宁县| 确山县| 都兰县| 巫溪县| 永宁县| 马山县| 胶州市| 磐石市| 新乐市|