【Java篇】谈谈如何从字符串中识别出中文地址

【Java篇】谈谈如何从字符串中识别出中⽂地址今天,我们就来聊聊怎么从⼀个字符串中解析出地址。
有以下⼏种情况:
1.标准的格式 省,市,区...
2.没有省,但是包含以下级别地区关键字
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};
}

本文发布于:2024-09-21 20:53:10,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/211110.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:关键字   地址   数组   地区   字符串   匹配
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议