2014-10-29 2 views
1

У меня есть EdiText. Пользователь может указать хэштеги в нем. Я хочу получить эти хэштеги и добавить их в ArrayList. Как я могу получить эти хэштеги от EdiText.Получить все хэштеги из EditText

Пусть мой 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, вероятно, не имеет таких методов, потому что он не предназначен для использования таким образом, хотя я не очень хорошо знаком с ним. Я уверен, что здесь есть эксперт, который может ответить на этот вопрос. –

+0

любой другой способ получить хэштеги упоминания из edittext? –

ответ

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+) матчи все Hashtags, которые начинаются с #.

Это тоже быстро.

enter image description here

+0

Спасибо кодер! если мой edittext содержит #### без пробелов и текста (проверен). показывая как хэштег, но не предполагаемый хэштег? –

+1

Затем вместо этого используйте '(# \\ w +)'. – Coder

+0

+1 для 0.07 –

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, разбивает его на отдельные слова, создает список всех слов, которые начинаются с #

Как упоминал Язан, хорошей альтернативой if (word.substring(0, 1).equals("#") является if (word.startsWith("#")

Timing

enter image description here

+0

просто вопрос, есть ли преимущество для 'substring()' over 'startsWith()'? – Yazan

+2

@ Язан не уверен, я прочитал эту тему, что подстрока была, по крайней мере, быстрее, чем другие 2 метода, названные там, но startsWith(), конечно, хорошая альтернатива. http://stackoverflow.com/questions/18201191/what-is-the-best-way-to-get-the-first-letter-from-a-string-in-java-returned-as –

+0

Спасибо Тим! но я чувствую, что это не лучший способ. это занимает много времени r8? –

Смежные вопросы