输入的文本 可能随机点击进行编辑过 发送前需要校验一下需要@的人是否正确,此示例 是比较简单的一种做法,可能不适合较为复杂的场景
List<String> atUser = [];
List<String> listUser = ["张三", "李四", "王五", "赵四"];
var inputText = "唐王: 大唐盛世诗人作诗大会今天18:00开始, 诗人@李白以及粉丝@张三 @李四 @王五 @杜甫 请前来欣赏";
int atIndex = -1;
for (int i = 0; i < inputText.characters.length; i++) {
// 已经找到@下标 找到空格截止位置
if (inputText.characters.elementAt(i) == " " && atIndex != -1) {
// 截取到用户名
var getName = inputText.substring(atIndex + 1, i);
var searchaUser = listUser.where((ename) => getName == ename).toList();
if (searchaUser.isNotEmpty) {
// 复原下标
atIndex = -1;
atUser.add(searchaUser.first);
print("他在群里=> $getName");
} else {
print("他不在群里 => $getName");
}
}
// 存在@符号 判断是否@了人
if (text.characters.elementAt(i) == "@") {
atIndex = i;
}
}
print("\n我要艾特他们$atUser");
// print => 我要艾特他们[李四, 王五, 杜甫]
示例中没有艾特到李白 是因为@李白 并不是以空格结尾,substring截取规则 @开头,空格结尾,然后根据截取的字符从群用户中查询是否存在此人,存在则存入 atUser数组中。