亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

如何輕松編寫一個強大的字符串分解器

2019-11-18 11:12:26
字體:
來源:轉載
供稿:網友

一、概述

大多數java程序員都曾經使用過java.util.StringTokenizer類。它是一個很方便的字符串分解器,主要用來根據分隔符把字符串分割成標記(Token),然后按照請求返回各個標記。這個過程稱為Tokenization,實際上就是把字符序列轉換成應用程序能夠理解的多個標記。

雖然StringTokenizer用起來很方便,但它的功能卻很有限。這個類只是簡單地在輸入字符串中查找分隔符,一旦找到了分隔符就分割字符串。它不會檢查分隔符是否在子串之中這類條件,當輸入字符串中出現兩個連續的分隔符時,它也不會返回""(字符串長度為0)形式的標記。

為了突破這些局限,Java 2平臺提供了BreakIterator類,它是在StringTokenizer之上改進的字符串分解器。由于JDK 1.1.x沒有提供這個類,為了滿足自己的需要,開發者經?;ㄙM很多時間從頭開始編寫分解器。在涉及到數據格式化處理的大型工程中,這類定制的字符串分解器有時隨處可見,而且這種情況并不罕見。

本文的目標是幫助你利用現有的StringTokenizer類,編寫一個高級字符串分解器。

二、StringTokenizer的局限

你可以用以下三種構造函數中的任意一種創建StringTokenizer分解器:

StringTokenizer(String sInput):以空白字符( ,/t,/n)為分隔符分割字符串。

StringTokenizer(String sInput, String sDelimiter):以sDelimiter為分隔符分割字符串。

StringTokenizer(String sInput, String sDelimiter, boolean bReturnTokens):以sDelimiter為分隔符分割字符串,但假如bReturnTokens為true,則分隔符也作為標記返回。

第一個構造函數不檢查輸入字符串是否包含子串。例如,假如以空白字符為分隔符分割hello. Today /"I am /" going to my home town,則字符串分解結果是hello.、Today、"I、am、"、going等,而不是hello.、Today、"I am "、going等。

第二個構造函數不檢查兩個分隔符連續出現的情況。例如,假如以,為分隔符分割book, author, publication,,,date published這個字符串,則StringTokenizer返回book、author、publication和date published這四個標記,而不是book、author、publication、""、""和date published這6個標記(其中""表示0長度字符串)。要得到6個標記的答案,你必須把StringTokenizer的bReturnTokens參數設置為true。

答應設置值為true的bReturnTokens參數是一個重要的功能,因為它考慮到了分隔符連續出現的情況。例如,使用第二個構造函數時,假如數據是動態收集得到而且要用來更新數據庫中的表,輸入字符串中的標記對應著表里面列的值,那么當我們不能確定哪一個列應該設置為""時,我們就無法把輸入串中的標記映射到數據庫列。假設我們要把記錄插入到一個有6個列的表,而輸入數據中包含兩個連續的分隔符。此時,StringTokenizer的分解結果是5個標記(兩個連續的分隔符代表""標記,它將被StringTokenizer忽略),而我們卻有6個字段需要設置。同時,我們也不知道連續分隔符在哪里出現,所以也就不知道哪一個列應該設置成""。

當標記本身等同于分隔符(無論是長度還是值)且位于子串之內時,第三個構造函數無效。例如,假如我們要以,為分隔符分解字符串book, author, publication,/",/",date published(這個字符串包含一個,標記,它與分隔符一樣),結果是book、author、publication、"、"、date published這六個標記,而不是book、author、publication、,(逗號字符)、date published這五個標記。再提醒一下,即使我們把StringTokenizer的bReturnTokens參數設置設置成了true,在這種情況下也沒有什么幫助。

三、高級字符串分解器

在編寫代碼之前,你必須搞清楚一個好的分解器有哪些基本要求。因為Java開發者已經習慣于使用StringTokenizer類,所以一個好的分解器應該提供StringTokenizer類提供的所有實用方法,比如hasMoreTokens()、nextToken()、countTokens()。

本文提供的代碼很簡單,而且大部分代碼足以自我解釋。在這里,我主要利用了StringTokenizer類(創建類實例時bReturnTokens參數設置為true),并提供了上面提到的幾個方法。大多數時候標記與分隔符不同,有些時候分隔符卻要作為標記輸出(盡管非常罕見),此時假如出現了對標記的請求,分解器要把分隔符作為標記輸出。創建PowerfulTokenizer對象時,你只需要提供輸入字符串和分隔符這兩個參數,PowerfulTokenizer將在內部使用bReturnTokens設置成true的StringTokenizer。(這么做的原因在于,假如不是用bReturnTokens設置成true的方式創建StringTokenizer,那么它將在解決先前提出的問題時受到限制)。為了正確地控制分解器,代碼在幾個地方(計算標記的總數量以及nextToken())檢查bReturnTokens是否設置成了true。

你可能已經發現,PowerfulTokenizer實現了Enumeration接口,從而也就實現了hasMoreElements()和nextElement()這兩個方法,而這兩個方法又分別把調用直接委托給hasMoreTokens()和nextToken()。(由于實現了Enumeration接口,PowerfulTokenizer實現了與StringTokenizer的向后兼容。)

我們來看一個例子,假設輸入字符串是hello, Today,,, /"I, am /", going to,,, /"buy, a, book/",分隔符是,。用分解器分割這個字符串時返回結果如表1所示:

表1:字符串分解結果

輸入字符串包含11個逗號(,)字符,其中3個在子串里面、4個連續出現(Today,,,中包含兩個連續逗號,第一個逗號是Today的分隔符)。下面是PowerfulTokenizer計算標記總數的算法:

QQ病毒 騰訊QQ空間代碼專題 PPT教程專題 ADSL應用面面俱到 fireworks教程專題 計算機和網絡技術基礎知識 校園網專題 網吧技術專題

  假如bReturnTokens=true,把子串中的分隔符數量乘以2,再從實際總數量減去該數字,就得到了標記的總數。理由是,對于子串buy, a, book,StringTokenizer將返回5個標記(即buy:,:a:,:book),而PowerfulTokenizer將返回一個標記(即buy, a, book),兩者的差值是4(即,2乘以子串中的分隔符數量)。這個公式對于所有包含分隔符的子串都有效。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性在线观看| 77777少妇光屁股久久一区| 亚洲精品美女在线| 91超碰caoporn97人人| 亚洲色图欧美制服丝袜另类第一页| 国产69精品久久久久99| 91久久久久久久一区二区| 欧美精品video| 欧美精品精品精品精品免费| 综合激情国产一区| 精品久久久国产| 国产成人精品综合久久久| 亚洲自拍欧美另类| 欧美在线观看网址综合| 亚洲裸体xxxx| 中文字幕亚洲综合久久筱田步美| 亚洲福利视频专区| 亚洲精品欧美极品| 久久久综合av| 亚洲一级一级97网| 深夜成人在线观看| 国产成人精品a视频一区www| 亚洲美女动态图120秒| 91夜夜未满十八勿入爽爽影院| 欧美亚洲在线视频| 亚洲精品自拍偷拍| 亚洲欧洲第一视频| 91精品国产91久久| 日韩精品免费在线| 成人a在线观看| 97精品伊人久久久大香线蕉| 亚洲精品资源美女情侣酒店| 久久综合亚洲社区| 国产一区二区三区网站| 欧美在线不卡区| 91高潮精品免费porn| 欧洲午夜精品久久久| 欧洲亚洲妇女av| 精品久久久久久久久久久久久| 91精品国产91久久久久福利| 欧美电影在线免费观看网站| 欧美韩国理论所午夜片917电影| 日韩久久精品电影| 色七七影院综合| 亚洲欧美自拍一区| 亚洲色图国产精品| 国产欧美日韩视频| 自拍偷拍免费精品| 中文字幕亚洲无线码a| 精品国产乱码久久久久久虫虫漫画| 欧美激情2020午夜免费观看| 九九热这里只有在线精品视| 久久免费在线观看| 日本精品一区二区三区在线播放视频| 国内免费久久久久久久久久久| 久热精品在线视频| 国产精品美女主播在线观看纯欲| 91精品国产免费久久久久久| 成人久久精品视频| 成人写真福利网| 国产日韩欧美在线播放| 国产成人精品一区二区三区| 欧美电影电视剧在线观看| 日韩美女福利视频| 在线观看不卡av| 日本久久久a级免费| 亚洲午夜未满十八勿入免费观看全集| 欧美资源在线观看| 亚洲娇小xxxx欧美娇小| 亚洲一区国产精品| xxav国产精品美女主播| 怡红院精品视频| 91精品国产自产在线| 欧美在线xxx| 日韩欧美国产一区二区| 欧美色视频日本版| 色悠悠国产精品| 亚洲在线观看视频网站| 欧美激情18p| 久久精品国产久精国产一老狼| 北条麻妃在线一区二区| 亚洲国产日韩欧美综合久久| 黄色成人在线播放| 久久久噜噜噜久久中文字免| 另类图片亚洲另类| www.久久草.com| 国产经典一区二区| 欧美日韩999| 国产精品99久久久久久久久久久久| 亚洲区中文字幕| 日韩毛片中文字幕| 日韩av日韩在线观看| 亚洲欧美制服中文字幕| 国内精品小视频在线观看| 91亚洲人电影| 亚洲精品国产精品国自产观看浪潮| 午夜精品福利视频| 欧美日韩免费一区| 成人天堂噜噜噜| 国产视频精品va久久久久久| 日韩高清电影好看的电视剧电影| 成人亚洲欧美一区二区三区| 日韩欧亚中文在线| 国产在线精品一区免费香蕉| 最近2019年日本中文免费字幕| 国产精品久久久91| 久久久精品2019中文字幕神马| 这里只有精品视频| 国产精品久久久久7777婷婷| 国产日韩换脸av一区在线观看| 日韩中文字幕网站| 久久精品欧美视频| 久久久www成人免费精品| 亚洲精品suv精品一区二区| 国产suv精品一区二区三区88区| 国产欧美va欧美va香蕉在线| 日韩在线中文字| 久久综合色88| 欧美另类在线播放| 欧美性在线观看| 久久五月天色综合| 久久久久日韩精品久久久男男| 国产精品手机播放| 国产精品久久久久久av福利软件| 456亚洲影院| 欧美人与性动交| 国产欧美精品日韩| 久久久av一区| 久久久精品一区| 久久电影一区二区| 欧美专区日韩视频| 久久久91精品| 中文字幕久热精品在线视频| 91久久久精品| 国产精品欧美激情| www.欧美精品| 在线看欧美日韩| 欧美激情免费看| 欧美成人免费在线视频| 亚洲乱亚洲乱妇无码| 一本色道久久88精品综合| 亚洲精品国产精品乱码不99按摩| 亚洲女人被黑人巨大进入| 久久久视频免费观看| 中文字幕日韩免费视频| 亚洲免费视频观看| 91精品久久久久久久久中文字幕| 97超级碰在线看视频免费在线看| 日韩毛片在线看| y97精品国产97久久久久久| 日韩在线视频中文字幕| 北条麻妃99精品青青久久| 亚洲第一区中文99精品| 亚洲国产美女久久久久| 欧美激情视频网站| 国产亚洲精品久久久久久牛牛| 亚洲国产99精品国自产| 欧美极品美女电影一区| 亚洲欧美日韩中文视频| 成人免费视频在线观看超级碰| 国产va免费精品高清在线观看| 国产黑人绿帽在线第一区| www.99久久热国产日韩欧美.com| 6080yy精品一区二区三区|