2014-10-29 5 views
1

나는 EdiText이 있습니다. 사용자는 그 안에 해시 태그를 언급 할 수 있습니다. 해시 태그를 가져와 ArrayList에 추가하고 싶습니다. 해시 태그를 EdiText에서 어떻게 얻을 수 있습니까? #Stackoverflow #hashtag #problemEditText에서 모든 해시 태그 가져 오기

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에서 해시 태그를 가져 오는 anyother 방법은 무엇입니까? –

답변

3

타이밍 :

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에 공백과 텍스트가없는 ####이 포함 된 경우 (테스트 완료) 해시 태그로 표시되지만 해시 태그로 간주되지 않습니까? –

+1

그런 다음'(# \\ w +)'를 대신 사용하십시오. – Coder

+0

+1 for the 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에서 텍스트를 가져옵니다 : 가정

edittxtmsg#Stackoverflow slove me #hashtag #problem

내가이 해시 태그를 원하는 포함 #

야잔이 언급했듯이 의 좋은 대안은입니다.

당신은 EditText에서 모든 해시 태그를 얻기 위해 정규 표현식을 사용할 수 있습니다

enter image description here

+0

그냥 질문에,'startsWith()'보다'substring()'에 이점이 있습니까? – Yazan

+2

@ Yazan 확실하지는 않지만이 주제는 하위 문자열이 다른 두 메서드보다 빠르다는 것을 읽었지만 startsWith()는 물론 좋은 대안입니다. http://stackoverflow.com/questions/18201191/what-is-the-best-way-to-get-the-first-letter-from-a-string-in-java-returned-as –

+0

감사합니다. Tim! 그러나 나는 그것이 최선의 방법이 아니라고 느낍니다. 그것은 많은 시간 r8 걸립니까? –

관련 문제