問題背景:
有一堆地址數(shù)據(jù),要從地址數(shù)據(jù)中抽取號(hào)、幢、棟之前的數(shù)字,并把數(shù)字對(duì)應(yīng)的號(hào)、幢、棟標(biāo)出來
問題解決:
初步思路:
這里的問題其實(shí)就是把字符串里的數(shù)字提取出來,再找到數(shù)字后面對(duì)應(yīng)的號(hào)幢棟,使用c#,步驟如下:
1、利用正則提取數(shù)字,遍歷得到數(shù)字列表
2、根據(jù)數(shù)字列表數(shù)字的位置遍歷字符串,將字符串分割為0-第一個(gè)數(shù)字,第一個(gè)數(shù)字之后的值-第2個(gè)數(shù)字,
3、根據(jù)遍歷得到的數(shù)字列表和字符串列表判斷數(shù)字對(duì)應(yīng)的是號(hào)幢棟,然后進(jìn)行輸出
初步思路的問題:
實(shí)際的數(shù)字表示有單純的數(shù)字表示,也有類似1-2-2這一類的數(shù)字,顯然,這類數(shù)字不能被分割,在碰到這個(gè)問題之后,首先想到的方法是遍歷數(shù)字,看數(shù)字前后是否有‘-’,如果有,則進(jìn)行連接,但實(shí)際處理邏輯十分復(fù)雜,遂放棄;后觀察地址數(shù)據(jù)發(fā)現(xiàn),'-'只會(huì)出現(xiàn)在數(shù)字中間,沒有出現(xiàn)在中文字符之間,而數(shù)字與數(shù)字區(qū)分必然有中文,因此,想到把中文替換為特殊的符號(hào)‘&’,然后用此符號(hào)進(jìn)行字符串的分割,由此得到改進(jìn)思路
改進(jìn)思路
1、利用正則替換字符串中文為‘&’
2、利用‘&’分割字符串
3、判斷分割后的列表是否包含數(shù)字,如包含數(shù)字,則將此加入數(shù)字列表
4、進(jìn)行初步思路的第2、3步