Как перечислить все упоминания в строке - PullRequest
1 голос
/ 17 января 2020

Я создаю EditText, который может упоминать других пользователей при написании @ с вашим ником, как, например, в Facebook, Instagram, Twitter и др. c. Например, в тексте «Сегодня @john и @jane съели торт» я хочу создать ArrayList со значениями «john» и «jane». Я попробовал это , но это не сработало. Что нужно сделать, чтобы иметь возможность сделать это?

Ответы [ 4 ]

4 голосов
/ 17 января 2020

Используйте это регулярное выражение. Он находит группы символов слова (буквы, цифры, подчеркивания), которые следуют за @.

val atMentions: List<String> = "(?<=@)\\w+".toRegex().findAll(editText.text).map { it.value }

Если вам нужно определить другой набор символов слова, замените \\w выше на [\\w] и ставьте другие допустимые символы сразу после w.

0 голосов
/ 17 января 2020
public static ArrayList<String> getMentionedNames(String text){
        String[] tmp=text.split("@");
        ArrayList<String> arrayList=new ArrayList<>();
        for (int i=1;i<tmp.length;i++){
            String first=tmp[i].split(" ")[0];
            arrayList.add(first);
        }
        return arrayList;
    }
0 голосов
/ 17 января 2020

Я думаю, что есть 2 хороших варианта для этого:

  1. Используйте регулярное выражение и проанализируйте фрагмент. Создать группы из найденных пользовательских тегов.
  2. Используйте Apache UIMA Ruta для поиска структур в тексте и аннотирования тегов пользователя. https://uima.apache.org/d/ruta-current/tools.ruta.book.html
0 голосов
/ 17 января 2020

Вы могли бы просто сделать

val list = mutableListOf<String>()
if(text.contains("@"))
   text.split("@").forEach { list.add(it.substringBefore(" ")) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...