Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何找出字符串中以#开头的单词_String_Flutter_Dart - Fatal编程技术网

String 如何找出字符串中以#开头的单词

String 如何找出字符串中以#开头的单词,string,flutter,dart,String,Flutter,Dart,我想找出所有以#开头的单词 例如=这是一个#标记 我想创建这个(#标记)tappable并将其颜色更改为蓝色。 请给点建议 Text("This is a #tag"), 首先,可以使用split()方法获取句子中的单词列表。然后,您可以检查该列表中的每个单词,如果以#开头,则可以将其添加到hashTag列表中。它将如下所示: String s = "This is a #tag"; List<String> splitted

我想找出所有以#开头的单词

例如=这是一个#标记

我想创建这个(#标记)tappable并将其颜色更改为蓝色。 请给点建议

Text("This is a #tag"),
首先,可以使用split()方法获取句子中的单词列表。然后,您可以检查该列表中的每个单词,如果以
#
开头,则可以将其添加到hashTag列表中。它将如下所示:

    String s = "This is a #tag";
    List<String> splitted = s.split(" ");
    List<String> hashTags = List<String>();
    for (var item in splitted) {
      if (item.startsWith("#")) {
        hashTags.add(item);
      }
    }

    print(hashTags);
    // Expected output is: [#tag]

String s=“这是一个#标记”;
列表拆分=s.split(“”);
List hashTags=List();
对于(拆分中的var项目){
if(项目开始时以“#”号填列){
hashTags.add(项目);
}
}
打印(标签);
//预期输出为:[#标记]

您可以使用正则表达式查找以字符#开头的所有单词。然后使用Text.rich或RichText的InlineSpan小部件以蓝色显示匹配的单词,并使用WidgetSpan小部件使匹配的单词可点击。请参阅下面的代码或直接在上运行它

导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
debugShowCheckedModeBanner:false,
家:脚手架(
appBar:appBar(
标题:常量文本(“颤振演示”),
),
正文:中(
子项:MyWidget(),
),
),
);
}
}
类MyWidget扩展了无状态Widget{
@凌驾
小部件构建(构建上下文){
最终列表textSpans=[];
final String text=“这是一个#标记。这是#标记2。这是#标记3。”;
最终RegExp regex=RegExp(r“\\\\(\w+));
final Iterable matches=regex.allMatches(文本);
int start=0;
对于(比赛中的最后一场比赛){
添加(TextSpan(text:text.substring(start,match.start));
textSpans.add(WidgetSpan(
儿童:手势检测器(
onTap:()=>print(“您点击了#${match.group(1)}”),
子:文本(“#${match.group(1)}”,
样式:const TextStyle(颜色:Colors.blue‘‘‘‘)’);
开始=匹配。结束;
}
添加(TextSpan(text:text.substring(start,text.length));
返回Text.rich(TextSpan(子项:textSpans));
}
}

这是我写的代码。还没有测试过,但希望它能工作

 List<String> hashAdder(String value) {
    List<String> tags = [];
    bool hashExist = value.contains('#');
    if (hashExist) {
      for (var i = 0; i < value.length; i++) {
        int hashIndex = value.indexOf('#');
        int hashEnd = value.indexOf(' ', hashIndex);
        tags.add(value.substring(hashIndex, hashEnd));
        value = value.substring(hashIndex);
      }
    }
    return tags;
  }
列表哈希加法器(字符串值){
列表标记=[];
bool hashExist=value.contains(“#”);
如果(hashExist){
对于(变量i=0;i
使用
RegEx
只需两行即可获得所需的结果:

List<String> extractHashtags(String text) {
  Iterable<Match> matches = RegExp(r"\B(\#[a-zA-Z]+\b)").allMatches(text);
  return matches.map((m) => m[0]).toList();
}
List extractHashtags(字符串文本){
Iterable matches=RegExp(r“\B(\\\[a-zA-Z]+\B)”)。所有匹配项(文本);
返回matches.map((m)=>m[0]).toList();
}
List<String> extractHashtags(String text) {
  Iterable<Match> matches = RegExp(r"\B(\#[a-zA-Z]+\b)").allMatches(text);
  return matches.map((m) => m[0]).toList();
}