2017-07-27 1 views
-1

Ich baue eine Social-Media-App und ich möchte die "Tagging" -Funktion hinzufügen. Mein erster Gedanke war, nach einer Instanz eines ganzen Wortes zu suchen, das mit @ beginnt. Das ist, was ich bisher habe.Wie finde ich eine Instanz eines ganzen Wortes in Java (Android)? für die Benutzer-Tagging auf einer Social-Media-App

String text = "@martin I will come and meet you at the woods [email protected] @ martin"; 

List<String> tokens = new ArrayList<String>(); 
tokens.add("@martin"); // martin should be an string arbitrary 

String patternString = "\\b(" + StringUtils.join(tokens, "|") + ")\\b"; 
Pattern pattern = Pattern.compile(patternString); 
Matcher matcher = pattern.matcher(text); 

while (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 

Es sollte @martin ausdrucken, aber nicht [email protected], @ oder @ martin usw.

Bin ich zu einer Lösung schließen hier, und gibt es einen besseren Weg, dies zu tun?

Antwort

1

Try this:

String text = "@martin I will come and meet you at the woods [email protected] @ martin"; 

String patternString = "(^|\\W)(@\\w+?)(\\W|$)"; 
Pattern pattern = Pattern.compile(patternString); 
Matcher matcher = pattern.matcher(text); 

while (matcher.find()) { 
    System.out.println(matcher.group(2)); 
} 
+0

Ich denke, die 'tokens' Liste benötigt wurde, um zu bestimmen, ob ein Tag gültig war oder nicht. Diese Regex erlaubt jedem Wort mit einem '@' als ein Tag verwendet werden, auch für einige Benutzernamen, die nicht existieren – Matt

+0

Tun Sie einfach so etwas: 'Liste tokens = new ArrayList (); tokens.add ("@ martin"); String patternString = "(^ | \\ W) (" + StringUtils.join (Token, "|") + ") (\\ W | $)"; ' –

+0

Ohne' Pattern.quote', kann es sein Probleme mit diesem Ansatz. Es werden auch keine aufeinander folgenden Übereinstimmungen gefunden ('@ martin, @ joe @ kate'). –

Verwandte Themen