只写出伪代码或者略微详细的Demo就好
HashTag是指在一段文字中,以#标识的内容,且不含有空格。比如“this is a #book , that is a #desk .”中有两个HashTag。有如下的类定义,要求补充完整三个方法:
public class HashTagQ {
private TreeMap<String, Integer> map;
public HashTagQ(){
map=new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
}
public LinkedList<String> getHashTags(){
LinkedList<String> list;
//此处代码省略
return list;
}
public void updateMap(LinkedList<String> list){
//补充完整该方法。
//将list中字符串添加到map中。如果有一个hashTag在map中存在,则将其出现次数加1;否则添加该hashTag。
//如果没有则初始化其出现次数为1}
public int sumHashTag(){
//补充完整该方法,统计map中HashTag的出现次数}
HashTag是指在一段文字中,以#标识的内容,且不含有空格。比如“this is a #book , that is a #desk .”中有两个HashTag。有如下的类定义,要求补充完整三个方法:
public class HashTagQ {
private TreeMap<String, Integer> map;
public HashTagQ(){
map=new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
}
public LinkedList<String> getHashTags(){
LinkedList<String> list;
//此处代码省略
return list;
}
public void updateMap(LinkedList<String> list){
//补充完整该方法。
//将list中字符串添加到map中。如果有一个hashTag在map中存在,则将其出现次数加1;否则添加该hashTag。
//如果没有则初始化其出现次数为1}
public int sumHashTag(){
//补充完整该方法,统计map中HashTag的出现次数}
public class HashTagQ {
public TreeMap<String, Integer> map;
public HashTagQ(){
map=new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
}
public LinkedList<String> getHashTags(){
LinkedList<String> list;
//此处代码省略
// 这里不明白是不是需要补充
return list;
} public void updateMap(LinkedList<String> list){
//补充完整该方法。
//将list中字符串添加到map中。如果有一个hashTag在map中存在,则将其出现次数加1;否则添加该hashTag。
//如果没有则初始化其出现次数为1
for(String line : list){
int hashIndex = line.indexOf("#");
if(hashIndex == -1 || hashIndex == line.length() - 1){
continue; // 如果这行字符不包括 #, 或者#为最后一个字符,跳过
}
String subline = line;
while(hashIndex != -1){
subline = subline.substring(hashIndex); //截取包括#在内的字符
if(subline.length() == 1){
break;
}
if(subline.charAt(1) == 32){ //检查左边第二个字符是不是空格
subline = subline.substring(1); //截取空格后的字符串
hashIndex = subline.indexOf("#"); //寻找下一个#的位置
continue;
}
int spaceIndex = subline.indexOf(" "); // 获取空格的下标
String mapKey = "";
if(spaceIndex != -1){
mapKey = subline.substring(0, spaceIndex); //截取 hashtag
subline = subline.substring(spaceIndex); // 截取下一段字符串
}else{
mapKey = subline;
subline = "";
}
map.merge(mapKey, 1, (oldV, newV) -> oldV + 1); // 如果键存在,加一,如果之前不存在,存一
hashIndex = subline.indexOf("#");
}
} } public int sumHashTag(){
int sum = 0;
for(Entry<String, Integer> entries : map.entrySet()){
sum = sum + entries.getValue();
}
return sum;
}
}
private TreeMap<String, Integer> map; public HashTagQ(){
map=new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
} /*public LinkedList<String> getHashTags(){
LinkedList<String> list;
//此处代码省略
// 这里不明白是不是需要补充
return list;
} */ public void updateMap(LinkedList<String> list) {
//补充完整该方法。
//将list中字符串添加到map中。如果有一个hashTag在map中存在,则将其出现次数加1;否则添加该hashTag。
//如果没有则初始化其出现次数为1 Predicate<String> containsHash = line -> line.contains("#");
Predicate<String> hashNotAtTheEnd = line -> line.indexOf("#") != line.length() - 1; list.stream()
.filter(containsHash.and(hashNotAtTheEnd))
.forEach(filteredLine ->{
Pattern pattern = Pattern.compile("\\b\\s#[0-9A-Za-z]+\\b");
Matcher matcher = pattern.matcher(filteredLine);
while (matcher.find()) {
int startIndex = matcher.start();
int endIndex = matcher.end();
String mapKey = "";
if (endIndex == filteredLine.length() - 1) {
mapKey = filteredLine.substring(startIndex + 1);
} else {
mapKey = filteredLine.substring(startIndex + 1, endIndex + 1);
}
map.merge(mapKey, 1, (oldV, newV) -> oldV + 1);
}
});
} public int sumHashTag(){
int sum = 0;
for(Map.Entry<String, Integer> entries : map.entrySet()){
sum = sum + entries.getValue();
}
return sum;
}
}