用Java写出给定一个包含地区名称的字符串数组,请用正则匹配出字符串中的各个地区的等级并组织成k,v格式并打印出来。 [ "[山西省[太原市[杏花岭区]]]", "[山西省[太原市[尖草坪区]]]", "[河北省[石家庄市[新华区]]]", "[山东省[济南市[市中区]]]" ] 示例结果: { "山西省":{ "太原市":['杏花岭区','尖草坪区'] }, "河北省":{ "石家庄市":['新华区'] }, "山东省":{ "济南市": ['市中区'] } }
时间: 2023-07-28 12:25:43 浏览: 79
好的,我理解了你的问题。下面是一个Java代码示例,可以实现你的要求:
```java
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegionMatcher {
public static void main(String[] args) {
String[] regions = {"[山西省[太原市[杏花岭区]]]", "[山西省[太原市[尖草坪区]]]", "[河北省[石家庄市[新华区]]]", "[山东省[济南市[市中区]]]"};
Map<String, Map<String, String[]>> result = new HashMap<>();
Pattern pattern = Pattern.compile("\\[(.*?)\\]");
for (String region : regions) {
Matcher matcher = pattern.matcher(region);
String province = "";
String city = "";
String district = "";
while (matcher.find()) {
if (province.equals("")) {
province = matcher.group(1);
} else if (city.equals("")) {
city = matcher.group(1);
} else {
district = matcher.group(1);
}
}
if (!result.containsKey(province)) {
result.put(province, new HashMap<>());
}
Map<String, String[]> cities = result.get(province);
if (!cities.containsKey(city)) {
cities.put(city, new String[]{});
}
String[] districts = cities.get(city);
String[] newDistricts = new String[districts.length + 1];
System.arraycopy(districts, 0, newDistricts, 0, districts.length);
newDistricts[districts.length] = district;
cities.put(city, newDistricts);
}
System.out.println(result);
}
}
```
这个程序使用了正则表达式来匹配字符串中的省、市、区信息,然后将它们组织成一个嵌套的Map。最终的结果就是一个k,v格式的Map,其中key是省份名称,value是一个Map,其中key是城市名称,value是一个字符串数组,包含了城市下属的所有区的名称。
阅读全文