根據ip獲得省市資訊

2021-10-09 21:02:31 字數 1792 閱讀 7625

根據輸入ip,使用二分法獲得ip對應的省市資訊。

處理掉無效資料後,資料量大小不到20mb,使用乙個map,乙個set,占用記憶體不多,可以作為乙個介面服務使用。

輸入ip位址,輸出ip位址對應的省市。

內容格式如下:

ip開始

ip結束國家省

市區縣區域code

**如下:

/**

* *

* 根據輸入ip,使用二分法演算法獲得省市資訊

* * 第一位ip255 *256*256*256 = 4278190080,

* 目前資料中最大值為224 *256*256*256=3758096384,也超過int正數最大值2147483647,所以要使用long型別儲存ip位址轉後的值

* result=first+second+third+forth是將ip位址轉為long型別。每一位ip通過移動位置的操作,保證每一位ip的值不會覆蓋。

* */

object ip2cityinfo

val result=ip2long(ip)

if(!(province.equals("未知")||city.equals("未知")))else

set.add(result)

total=total+1

})//total與set.size相等,表示ip位址轉化為long型別,沒有衝突

if(total==set.size)else

println("輸入記錄總數:",total)

println("有效記錄條數:",ip2city.size)

println("無效記錄條數:",total-ip2city.size)

println("有效記錄取樣:")

for(e

println("無效記錄取樣:")

for(e

println("排序後記錄取樣:")

sorted=ip2city.keyset.toseq.sorted

for(e

//test

println(ip2cityinfo("1.194.194.198"))

println(ip2cityinfo("1.194.4.198"))

} /**

** 利用二分查詢演算法,根據輸入的ip字串省市資訊,查詢出包含此ip區間的

** @param ip 輸入ip

* @return 省市資訊

* */

def ip2cityinfo(ip :string):string= else if(sorted(mid)

}//當沒有查詢到結果,保證index取得最小的索引值

if(index==0)

ip2city(sorted(index))

} /**

* 將ip字串轉化為long型別數字

** 使用第乙個ip值的四位ip進行省市的鎖定。如果使用前三段導致獲得省市資訊不準確

* 222.221.30.199 222.221.30.201 中國 雲南省 昆明市 未知 530100

* 222.221.30.202 222.221.30.202 中國 雲南省 保山市 昌寧縣 530524

** */

def ip2long(ip :string):long=

}

根據IP獲取省市

public class ipaddress 2 0 4 d 25 0 5 01 d d?ip正則 string ip string.empty ip位址 string country string.empty 國家 string adr string.empty 省市 string html ge...

獲得省市區的統計資訊

問題描述 獲取各個省市的統計資訊 如 浙江省,則需要獲取省市區的所有統計資訊,如浙江省 浙江省下所有的市 浙江省下所有的市下的所有區 杭州市,則需要獲取杭州市 杭州市下所有區的統計資訊 濱江區,則獲取濱江區的統計資訊,思路 獲取所有的省市區的資訊 省的統計資料 市的統計資料,做關聯查詢,因為設定省市...

根據主機名獲得IP及根據IP獲得主機名

根據主機名獲得ip好說,前面已經學習過了,用函式gethostbyname獲得主機資訊,其中包括ip資訊 int cneighbordlg getipbyname afxmessagebox t list return 0 else 根據ip獲得主機資訊則要用gethostbyaddr函式 int ...