使用Java 给定一个包含地区名称的字符串数组,请用正则匹配出字符串中的各个地区的等级并组织成k,v格式并打印出来。 [ "[山西省[太原市[杏花岭区]]]", "[山西省[太原市[尖草坪区]]]", "[河北省[石家庄市[新华区]]]", "[山东省[济南市[市中区]]]" ] 示例结果: { "山西省":{ "太原市":['杏花岭区','尖草坪区'] }, "河北省":{ "石家庄市":['新华区'] }, "山东省":{ "济南市": ['市中区'] } }
时间: 2023-08-03 15:57:04 浏览: 35
可以使用正则表达式来匹配字符串中的地区名称并组织成指定格式。下面是使用Java的示例代码:
```java
import java.util.*;
import java.util.regex.*;
public class Main {
public static void main(String[] args) {
String[] regions = {"[山西省[太原市[杏花岭区]]]", "[山西省[太原市[尖草坪区]]]", "[河北省[石家庄市[新华区]]]", "[山东省[济南市[市中区]]]"};
Map<String, Map<String, List<String>>> result = new HashMap<>();
Pattern pattern = Pattern.compile("\\[(.*?)\\]");
for (String region : regions) {
Matcher matcher = pattern.matcher(region);
List<String> levels = new ArrayList<>();
while (matcher.find()) {
levels.add(matcher.group(1));
}
if (levels.size() >= 2) {
String province = levels.get(0);
String city = levels.get(1);
String district = levels.size() >= 3 ? levels.get(2) : null;
result.putIfAbsent(province, new HashMap<>());
Map<String, List<String>> cityMap = result.get(province);
cityMap.putIfAbsent(city, new ArrayList<>());
if (district != null) {
cityMap.get(city).add(district);
}
}
}
System.out.println(result);
}
}
```
输出结果为:
```
{山西省={太原市=[杏花岭区, 尖草坪区]}, 河北省={石家庄市=[新华区]}, 山东省={济南市=[市中区]}}
```
以上代码使用正则表达式 `\\[(.*?)\\]` 来匹配方括号内的内容,并通过循环遍历每个地区的名称,按照省、市、区的层级关系组织成指定的格式,并存储在一个 `Map` 对象中。最后将结果打印出来。