【问题标题】:Get all hashtags from EditText从 EditText 获取所有主题标签
【发布时间】:2014-12-25 05:59:09
【问题描述】:

我有一个EdiText。用户可以在其中提及主题标签。我想获取这些标签并将它们添加到ArrayList。如何从EdiText 获取这些主题标签。

假设我的edittxtmsg 包含#Stackoverflow slove me #hashtag #problem

我想要这些标签:#Stackoverflow #hashtag #problem

edittxtmsg.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence s, int start,
                        int before, int count) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void beforeTextChanged(CharSequence s, int start,
                        int count, int after) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void afterTextChanged(Editable s) {
                    // TODO Auto-generated method stub

                    int strLenght = s.toString().length();
                    int available = 140 - strLenght;
                    setAvailableSpace(available);
                    if (available < 0) {
                        s.delete(strLenght - 1, strLenght);
                    }
                    mfinalmsg = s.toString();


                }

                private void setAvailableSpace(int available) {
                    // TODO Auto-generated method stub
                    tvcount.setText(available + "");
                }
            });

【问题讨论】:

  • 嗯,你有短信和hastag过滤器。您认为有一种方法可以将这两者结合起来从文本中获取信息? Linkify 可能没有这样的方法,因为它不打算那样使用,尽管我对它不是很熟悉。我敢肯定这里有专家可以回答这个问题。
  • 任何其他方式从edittext获取主题标签提及?

标签: java android hashtag


【解决方案1】:

您可以使用正则表达式从EditText 获取所有主题标签:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

String text = editText.getText().toString();
String regexPattern = "(#\\w+)";

Pattern p = Pattern.compile(regexPattern);
Matcher m = p.matcher(text);
while (m.find()) {
    String hashtag = m.group(1);
    // Add hashtag to ArrayList
    ...
}

(#\\w+) 匹配所有以# 开头的主题标签。

这个也很快。

【讨论】:

  • 感谢编码员!如果我的 edittext 包含 #### 没有空格和文本(经过测试)。显示为主题标签但不应该是主题标签?
  • 然后改用(#\\w+)
  • @TimCastelijns 谢谢!
  • @Coder 帮助其他无名英雄 ;-) 还发现我们的方法同样快/慢也很酷
  • 如果您的主题标签包含#hashtag-1 等特殊字符,它不会选择-1.. 请帮助
【解决方案2】:
String text = editText.getText().toString();
String[] words = text.split(" ");    
List<String> tags = new ArrayList<String>();

for ( String word : words) {
    if (word.substring(0, 1).equals("#")) {
        tags.add(word);    
    }
}

editText 获取文本,将其拆分为单独的单词,创建以#开头的所有单词的列表

正如 Yazan 所说,if (word.substring(0, 1).equals("#") 的一个很好的替代品是if (word.startsWith("#")

时间

【讨论】:

  • 只是一个问题,substring()startsWith() 有优势吗?
  • @Yazan 不确定,我读到这个主题说 substring 至少比那里命名的其他 2 个方法快,但是 startsWith() 当然是一个不错的选择。 stackoverflow.com/questions/18201191/…
  • 谢谢蒂姆!但我觉得这不是最好的方法。 r8需要很多时间吗?
  • @SrikanthAppvolution 不,这实际上相当快
  • @SrikanthAppvolution 我添加了测试运行时间
猜你喜欢
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 2012-10-05
相关资源
最近更新 更多