Java 如何在开始时根据相同的子字符串合并字符串数组中的字符串?
字符串数组中的每个字符串都以HTML标记名开头,后跟“Java 如何在开始时根据相同的子字符串合并字符串数组中的字符串?,java,Java,字符串数组中的每个字符串都以HTML标记名开头,后跟“”:“”,后跟由“”、“分隔的属性名 这是字符串数组 a:accesskey,href,title a:href,title div:class div:class,id,role h3: li:id ul: 我必须打印 a:accesskey,href,title div:class,id,role h3: li:id ul: 必须根据相同的标记合并字符串,生成的字符串必须以标记名开头,然后必须跟在由逗号分隔的分组字
”:“
”,后跟由“”、“
分隔的属性名
这是字符串数组
a:accesskey,href,title
a:href,title
div:class
div:class,id,role
h3:
li:id
ul:
我必须打印
a:accesskey,href,title
div:class,id,role
h3:
li:id
ul:
必须根据相同的标记合并字符串,生成的字符串必须以标记名开头,然后必须跟在由逗号分隔的分组字符串中的唯一属性名后面。使用哈希映射
伪代码:
for each tag:
if not in map:
add to map -> key, new set
else:
add all values to the existing set
请将问题中的代码格式化。现在完全不清楚了。
a:accesskey,href,title
这是数组还是数组的字符串项?我在开发代码,而你在编写伪代码:这里不需要提供实际的代码,我认为OP至少可以自己解决这个问题。但指导方针是好的
String [] unsortedStrings = {"a:accesskey,href,title", "a:href,title", "div:class", "div:class,id,role", "h3:", "li:id", "ul:"};
Map<String, Set<String>> map = new HashMap<>();
Set<String> list = new HashSet<>();
for(String unsortedString : unsortedStrings) {
String split[] = unsortedString.split(":");
String [] values = (split.length == 1)? new String[0]:split[1].split(",");
list = map.get(split[0]);
if(list == null) {
list = new HashSet<>();
list.addAll(Arrays.asList(values));
} else {
list.addAll(Arrays.asList(values));
}
map.put(split[0], list);
}
for(Entry<String, Set<String>> entry : map.entrySet()) {
StringBuffer buffer = new StringBuffer();
Set <String> values = entry.getValue();
Iterator<String> it = values.iterator();
while(it.hasNext()){
buffer.append(it.next());
buffer.append(",");
}
if(buffer.length() > 0){
buffer.deleteCharAt(buffer.length() - 1);
}
System.out.println(entry.getKey() + ":" + buffer);
}
div:role,id,class
a:accesskey,href,title
ul:
h3:
li:id