自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解.NET字符串解析的具體過程

開發(fā) 后端
本文將介紹的是.NET字符串解析的具體過程,希望對大家日常開發(fā)工作有所幫助。

.NET字符串解析,在平常的開發(fā)工作中很長見,但是不一定大家都能完成好。希望通過本文,能使大家對.NET字符串解析有一個深刻的理解。

.NET字符串解析是程序員工作中非常重要的一部分,也是非??简灳幊棠芰Φ墓ぷ鳌;旧衔以诿嬖嚦绦騿T的時候,一定會出一道編程題目作為考察的一方面,而這道題目有很大的可能性是做字符串的解析。例如,給出一個模式規(guī)則,要求寫程序判斷某個字符串是否符合特定格式。例如,要求將BB Code轉(zhuǎn)化為HTML。而現(xiàn)在這個趣味編程題,來自于我目前正在進行的項目。因此從實用角度來說,也有一定現(xiàn)實意義。

這個標題基本上沒有包含多少信息,不過我也實在不知道該如何描述這個問題。這個任務(wù)是要從一個字符串中提取一些信息,于是我們先來定義概念:

首先是“token”,token是最小的信息單元,我們可以把它當作是一個字符串來處理。而多個token則組成了一個token group,token group之間的各token使用“-”進行分割。例如,以下便定義一個了token group:

  1. jeffz-hello-world 

一個token group可以用一個字符串數(shù)組或列表來表示,例如上面的字符串則表示一個包含三個token的token group,分別是jeffz,hello和world。多個token group則可以組成一整個字符串信息,我們把它稱為text。一個text中的各個token group使用“--”進行分割,例如:

group1-hello--group2-world一個text可以認為是token group的數(shù)組或列表。因此,最終從一個text中提取到的信息,則可以用一個字符串數(shù)組的列表來表示。例如,以上的text的信息其實就類似于:

  1. new List<string[]> { new string[] { "group1", "hello" }, new string[] { "group2", "world" } } 

不過您想到這樣一個問題:“-”是作為分割符使用的,但如果一個token中本身需要包含“-”又該如何呢?于是,我們又引入了單引號,被一組單引號包裹的token,其中所有的“-”被當作是普通的字符處理,不作為分隔符。例如:

jeffz-'hello-world'這樣一個字符串所表示的text,它包含一個token group,其中有兩個token:

  1. new List<string[]> { new string[] { "jeffz", "hello-world" } } 

但是,既然單引號也有特殊含義了,那么一個token中又如何表示一個單引號呢?于是乎,我們再定義一個規(guī)則,如果一個token中需要包含單引號的話,我們需要使用單引號來包含這個token,并且token中的單引號變成兩個單引號。例如:

jeffz-'hello''''world'它所表示的數(shù)據(jù)即為:

  1. new List<string[]> { new string[] { "jeffz", "hello''world" } } 

text中包含四個單引號,但是表示的數(shù)據(jù)中只有兩個單引號,這就是我們的“轉(zhuǎn)義”規(guī)則。還有值得注意的是,如果token中需要包含單引號或“-”,那么這個token在表示的時候一定需要用一對單引號包裹起來——這也是為了“簡化規(guī)則”。

這次的“趣味編程”便是希望寫一個方法,從text中提取出“數(shù)據(jù)”,也就是一個List<string[]>,我們假設(shè)所有的輸入都是正確的。

那么,這個規(guī)則又有什么含義呢?在我的項目中,這個字符串被當作是產(chǎn)品查詢頁面的URL,表示的自然是產(chǎn)品的查詢條件。由于查詢條件非常的豐富,還會根據(jù)不同的分類有所改變,因此在URL中表現(xiàn)查詢條件非常的麻煩。例如,淘寶的查詢頁面URL便是這樣的:

http://search1.taobao.com/browse/0/n-g,geytami-g,geytami-------1------7------------------4----0--------------------g,ojsxgzlsozsv64dsnfrwkwzvgaydalbzhe4tsxi---g,whflzr5rxy-------2-------b--40--coefp-0-all-0.htm?search_multi_condition=1&ssid=s1#ListView但是,這個URL對于某個人來說幾乎沒有任何可讀性。普通用戶對此的關(guān)注度自然小很多,但是這樣的URL也會給開發(fā)人員的工作造成不小的麻煩。在我看來,有一個相對易讀的規(guī)則還是很重要的。此外,據(jù)說URL中的關(guān)鍵字對于SEO也很有幫助(當然這點我不確定)。因此,我們設(shè)計了本文這種“自洽”的數(shù)據(jù)表示方式。如果您足夠“敏感”的話,會發(fā)現(xiàn)作為特殊字符的單引號或是“-”符號,它們在URL上是不需要轉(zhuǎn)義的——這也是我們?yōu)樗鼈冑x予特殊含義的原因。

于是現(xiàn)在,我們便可以使用這樣的URL字符串來表示一個查詢條件了:

  1. cpu-3.0g--color-red-green-black--price-5000-8000--weight-'3-'--keywords-'levi''s' 

這個text拆開后的得到的數(shù)據(jù)便是:

  1. new List<string[]>{    
  2. new string[] { "cpu", "3.0g" },    
  3. new string[] { "color", "red", "green", "black" },    
  4. new string[]   
  5. { "price", "5000", "8000" },   
  6.  new string[] { "weight", "3-" },  
  7.   new string[] { "keywords", "levi's" },} 

于是這個查詢條件便是:CPU為3.0G,顏色為紅、綠或黑,價格在5000到8000,重量在3千克內(nèi),并包含“l(fā)evi's”關(guān)鍵字的……筆記本?

您也來試試看吧!

原文標題:趣味編程:從字符串中提取信息

鏈接:http://www.cnblogs.com/JeffreyZhao/archive/2009/10/12/code-for-fun-tokenizer.html

【編輯推薦】

  1. C#集合、C#動態(tài)數(shù)組的概念淺析
  2. C#動態(tài)數(shù)組的詳解介紹
  3. C#動態(tài)數(shù)組的應(yīng)用詳解實例
  4. C#數(shù)組復(fù)制方法詳解
  5. C#判斷字符串應(yīng)用詳細解析
責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2009-11-26 16:26:32

PHP字符串mbstr

2010-01-08 15:11:22

VB.NET字符串轉(zhuǎn)義

2010-02-02 18:01:47

C++字符串替換函數(shù)

2011-08-10 18:47:18

Cocoa字符串

2009-11-26 16:43:11

PHP截取中文字符串

2009-11-12 11:04:52

2024-04-01 08:41:39

字符串.NET

2010-07-14 12:39:30

Prel字符串

2009-12-01 09:18:50

PHP分割字符串

2009-10-26 14:06:03

2010-11-25 15:59:33

字符串.NET

2009-12-01 09:52:40

PHP過濾字符串

2010-07-14 12:57:59

Perl字符串

2010-11-26 13:27:41

MySQL存儲過程

2010-03-22 17:53:50

Python字符Python字符串

2010-03-03 09:12:25

.NET字符串拘留池

2009-11-26 13:11:24

PHP字符串

2009-11-25 09:13:41

PHP數(shù)組轉(zhuǎn)字符串PHP字符串轉(zhuǎn)數(shù)組

2009-07-24 11:12:33

ASP.NET連接字符

2024-06-26 08:18:08

ES6模板字符串
點贊
收藏

51CTO技術(shù)棧公眾號