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?
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
Tun Sie einfach so etwas: 'Liste tokens = new ArrayList (); tokens.add ("@ martin"); String patternString = "(^ | \\ W) (" + StringUtils.join (Token, "|") + ") (\\ W | $)"; ' –
Ohne' Pattern.quote', kann es sein Probleme mit diesem Ansatz. Es werden auch keine aufeinander folgenden Übereinstimmungen gefunden ('@ martin, @ joe @ kate'). –