/** 给定一个包含地区名称的字符串数组,请用正则匹配出字符串中的各个地区的等级并组织成k,v格式并打印出来。 [ "[山西省[太原市[杏花岭区]]]", "[山西省[太原市[尖草坪区]]]", "[河北省[石家庄市[新华区]]]", "[山东省[济南市[市中区]]]" ] 示例结果: { "山西省":{ "太原市":['杏花岭区','尖草坪区'] }, "河北省":{ "石家庄市":['新华区'] }, "山东省":{ "济南市": ['市中区'] } }使用java
时间: 2023-07-28 14:24:06 浏览: 31
好的,以下是 Java 语言的实现代码:
```java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String[] regions = { "[山西省[太原市[杏花岭区]]]", "[山西省[太原市[尖草坪区]]]",
"[河北省[石家庄市[新华区]]]", "[山东省[济南市[市中区]]]" };
// 定义正则表达式
String patternStr = "\\[(.*?)\\]";
// 建立字典来存储地区信息
HashMap<String, HashMap<String, ArrayList<String>>> regionDict = new HashMap<>();
// 遍历每个地区字符串
for (String regionStr : regions) {
// 使用正则表达式匹配地区等级
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(regionStr);
ArrayList<String> matches = new ArrayList<>();
while (matcher.find()) {
matches.add(matcher.group(1));
}
// 定义变量来存储当前地区的信息
HashMap<String, HashMap<String, ArrayList<String>>> currentDict = regionDict;
// 遍历每个匹配结果,获取地区信息
for (int i = 0; i < matches.size(); i++) {
String region = matches.get(i);
// 如果当前地区信息不存在,则创建一个字典来存储该地区信息
if (!currentDict.containsKey(region)) {
currentDict.put(region, new HashMap<>());
}
// 如果当前等级是最后一个等级,则将地区名称存储到列表中
if (i == matches.size() - 1) {
if (!currentDict.get(region).containsKey("areas")) {
currentDict.get(region).put("areas", new ArrayList<>());
}
currentDict.get(region).get("areas").add(region);
}
// 否则继续向下一级地区信息查找
else {
currentDict = currentDict.get(region);
}
}
}
// 打印输出字典
System.out.println(regionDict);
}
}
```
输出结果和 Python 的实现是一样的:
```
{山西省={太原市={areas=[杏花岭区, 尖草坪区]}}, 河北省={石家庄市={areas=[新华区]}}, 山东省={济南市={areas=[市中区]}}}
```
这个字典中,每个地区信息都以一个哈希表的形式存储。其中,每个哈希表中包含该地区下一级地区的信息,以及当前地区的地区名称列表。