2014-10-29 28 views
1

我有一个EdiText。用户可以在其中提及主题标签。我想获得这些hashtags并将它们添加到ArrayList。我怎样才能从EdiText获得这些#标签。获取EditText的所有hashtags

假设我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 + ""); 
       } 
      }); 
+0

那么,你有短信和hastag滤镜。你会认为有一种方法可以将这两者结合起来从文本中获取信息? Linkify可能没有这样的方法,因为它不打算像那样使用,尽管我对它不是很熟悉。我确信在这里有一位专家可以回答这个问题。 – 2014-10-29 13:47:11

+0

以其他方式从edittext获取井号标签提及? – 2014-10-29 13:53:03

回答

3

您可以使用正则表达式从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+)匹配以#开头的所有主题标记。

这一个也是快。

enter image description here

+0

谢谢编码器!如果我的edittext包含####而没有空格和文本(已测试)。显示为标签,但不应该是标签? – 2014-10-29 15:08:53

+1

然后用'(#\\ w +)'代替。 – Coder 2014-10-29 15:22:14

+0

+1为0.07 – 2014-10-30 08:10:16

3
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("#")

定时

enter image description here

+0

只是一个问题,'substring()'比'startsWith()'更有优势吗? – Yazan 2014-10-29 14:57:10

+2

@Yazan不知道,我读过这个话题,说子字符串比其他2个方法至少快,但startsWith()当然是一个很好的选择。 http://stackoverflow.com/questions/18201191/what-is-the-best-way-to-get-the-first-letter-from-a-string-in-java-returned-as – 2014-10-29 15:00:10

+0

谢谢蒂姆!但我觉得这不是最好的方法。 r8需要很多时间? – 2014-10-29 15:06:41