【问题标题】:How to list all mentions in a String如何列出字符串中的所有提及
【发布时间】:2020-01-19 04:20:57
【问题描述】:

我正在创建一个EditText,可以在用您的昵称写 @ 时提及其他用户,例如在 Facebook、Instagram、Twitter 等上。例如,在文本“今天@john 和 @jane 吃了一个蛋糕” ",我想创建一个ArrayList,其值为“john”和“jane”。 I tried this 但它没有用。怎样做才能做到这一点?

【问题讨论】:

  • 请向我们展示您的尝试。另外,用户名的合法字符是什么?

标签: java android kotlin


【解决方案1】:

使用这个正则表达式。它会查找跟在@之后的单词字符组(字母、数字、下划线)。

val atMentions: List<String> = "(?<=@)\\w+".toRegex().findAll(editText.text).map { it.value }

如果您需要定义一组不同的单词字符,请将上面的 \\w 替换为 [\\w] 并将其他可接受的字符放在 w 之后。

【讨论】:

    【解决方案2】:

    我认为有两个不错的选择:

    1. 使用正则表达式并解析片段。创建找到的 UserTag 的组。
    2. 使用 Apache UIMA Ruta 在文本中查找结构并注释 UserTag。 https://uima.apache.org/d/ruta-current/tools.ruta.book.html

    【讨论】:

      【解决方案3】:
      public static ArrayList<String> getMentionedNames(String text){
              String[] tmp=text.split("@");
              ArrayList<String> arrayList=new ArrayList<>();
              for (int i=1;i<tmp.length;i++){
                  String first=tmp[i].split(" ")[0];
                  arrayList.add(first);
              }
              return arrayList;
          }
      

      【讨论】:

        【解决方案4】:

        你可以这样做

        val list = mutableListOf<String>()
        if(text.contains("@"))
           text.split("@").forEach { list.add(it.substringBefore(" ")) }
        

        【讨论】:

        • 这将贪婪地包含名称后面的任何标点符号,并且无论是否存在@,它都会包含字符串中的第一个单词。
        猜你喜欢
        • 2023-02-06
        • 2021-07-01
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-30
        相关资源
        最近更新 更多