从 EditText 获取所有主题标签

Sre*_*non 6 java android hashtag

我有一个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 + "");
                }
            });
Run Code Online (Sandbox Code Playgroud)

Cod*_*der 9

您可以使用正则表达式从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
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

这个也快。

在此处输入图片说明


Tim*_*Tim 5

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);    
    }
}
Run Code Online (Sandbox Code Playgroud)

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

正如 Yazan 提到的,一个很好的替代方案if (word.substring(0, 1).equals("#")if (word.startsWith("#")

定时

在此处输入图片说明

  • @Yazan 不确定,我读过这个主题,说 substring 至少比那里命名的其他 2 个方法快,但 startsWith() 当然是一个不错的选择。http://stackoverflow.com/questions/18201191/what-is-the-best-way-to-get-the-first-letter-from-a-string-in-java-returned-as (2认同)