【Java篇】谈谈如何从字符串中识别出中⽂地址今天,我们就来聊聊怎么从⼀个字符串中解析出地址。 有以下⼏种情况:
1.标准的格式 省,市,区...
3.没有省,也没有其他地区的关键字。
我们可以使⽤indexOf("关键字")来进⾏定位,但是不能保证地址中不包括关键字,⽐如袁州区,州和区都是关键字。
这样就需要把所有的关键字全部定位出来,再使⽤subString()来进⾏截取,然后进⾏判断是否为地址。
第⼀种情况:以下没有提出解决⽅式,稍微简单,可发邮件⾄ooyhao1996@163。
第⼆种情况:以下代码主要解决此类情况
第三种情况:则只需要使⽤下列代码取第⼀级⽅式即可获取所有地区。
完整解决⽅式+源码,请联系我。
/**
* 需求分析:
* 1.字符串中的关键字有 [市, 区, 县, 旗, 盟, 州, 岛]
* 2.第⼀级 :省 区(⾃治区、特别⾏政区)市(直辖市)tvline
* 3.通过逐字递增和逐字递减的⽅式搜索第⼀级,
mp3手表* 4.根据第⼀级查询第⼆级[市, 区, 县, 盟, 州, 岛]
* 5.根据第⼆级查询第三级[市, 区, 县, 旗, 盟, 州, 岛]
* 6.只有三级地址完全匹配才进⾏相应的操作,否则,不操作。
*
*/
/**
* 获取第⼀个级地址最⼤的长度
* @param addrList 需要检查的地址集合
* @return
*/
public static int getMaxLen(List<String> addrList){
if(addrList == null || addrList.size() == 0){
return -1;
}
int maxLen = (0).length();
for(int i = 1; i < addrList.size(); i++){
if(maxLen < (i).length()){
maxLen = (i).length();
}
}
return maxLen;
}
/**
* 从地址中获取第⼀级地址
*
* @param addrList 第⼀级地址的数组 * @param address 要搜索第⼀级地址的字符串
* @param len 第⼀级地址的最⼤长度
* @return 数组两个元素:
* 1.搜索到的地区在地区数组中的位置 -1表⽰不存在
* 2.地区的长度
停车场收费管理系统
*/
public static int[] getFirstLevel(List<String> addrList, String address,int len){
//记录第⼀级处于数组中的位置,0--N表⽰存在,-1表⽰不存在
int index = -1;
//记录临时⼦字符串
String s = "";
//记录截取的最⼤长度
int maxLen = 0;
/
/⽤来标识是否有匹配的标志位
boolean flag = false;
for(int i = 2; i <= len && i <= address.length(); i++){
//获取⼀个⼦串
s = address.substring(0,i);
for(int j = 0; j < addrList.size(); j++){
//判断省市的数组中是否包含该字符串
(j).contains(s)){
index = j;
maxLen = i;
flag = true;
break;
}else{
flag = false;
}
}
if(!flag){
break;
}
}
//返回,第⼀个标识处于第⼀级数组中的位置,第⼆个标识截取的最⼤长度
return new int []{index,maxLen};
}
/**
*
* @param addrList 地区数组
* @param address 需要检测的字符串
* @param keywords 地区关键字数组
* @return 返回数组,两个元素,
输送带接头设备* 1.地区在地区数组中的位置 -1表⽰不存在
* 2.地区的长度
*/
public static int [] getSecondOrThirdLevel(List<String> addrList, String address,String[] keywords){ //记录第⼆,三级处于数组中的位置,0--N表⽰存在,-1表⽰不存在
int index = -1;
//记录临时⼦字符串
String subString = "";
//记录截取的最⼤长度
int maxLen = 0;
抗干扰滤波器//⽤来记住关键字下标的集合
钛合金型材List<Integer> keywordIndexs = new ArrayList<Integer>();
//1.获取字符串中所有匹配关键字的下标
for(int i = 0; i < address.length(); i++){
//获取字符串中的每⼀个字
String str = (char)address.charAt(i)+"";
/
/⽤每⼀个字去与关键字匹配,使⽤集合记住每⼀个下标
for(int j = 0; j < keywords.length; j++){
//循环关键字列表
if(str.equals(keywords[j])){
//如果当前字符与关键字中的字符相同,则记录其下标 keywordIndexs.add(i);
}
}
}
//2.通过记录好的下标,去⼆级数组中查询
for(int i = 0; i<keywordIndexs.size(); i++){
//遍历下标集合,获取⼦串
subString = address.substring((i)+1); for(int j = 0; j < addrList.size(); j++){
if(subString.(j))){
index = j;
maxLen = (i)+1;
}
}
}
return new int[]{index,maxLen};
}