Regex в Java - анализ массива строк - PullRequest
1 голос
/ 12 марта 2019

У меня есть строковый массив, подобный этому:

    String tweetString = ExudeData.getInstance().filterStoppingsKeepDuplicates(tweets.text);
    // get array of words and split
    String[] wordArray = tweetString.split(" ");

После того, как я разделю массив, я печатаю следующее:

System.out.println(Arrays.toString(wordArray));

И получаю вывод:

[new, single, fallin, dropping, days, artwork, hueshq, production, iseedaviddrums, amp, bigearl7, mix, reallygoldsmith, https, , , t, co, dk5xl4cicm, https, , , t, co, rvqkum0dk7]

Я хочу удалить все запятые, https и отдельные буквы, такие как 't' (после использования метода split, описанного выше).Итак, я хочу закончить с этим:

[new, single, fallin, dropping, days, artwork, hueshq, production, iseedaviddrums, amp, bigearl7, mix, reallygoldsmith, co, dk5xl4cicm, https, co, rvqkum0dk7]

Я попытался сделать replaceAll вот так:

String sanitizedString = wordArray.replaceAll("\\s+", " ").replaceAll(",+", ",");

Но это просто дало мне тот же первоначальный вывод без изменений.Есть идеи?

Ответы [ 3 ]

3 голосов
/ 12 марта 2019

Если вы используете Java 8

String[] result = Arrays.stream(tweetString.split("\\s+"))
            .filter(s -> !s.isEmpty())
            .toArray(String[]::new);

Я хочу удалить все запятые, https и отдельные буквы, такие как 't'

В этом случае вы можете создать несколько фильтров, например, @Andronicus или со спичками, и некоторые регулярные выражения, например:

String[] result = Arrays.stream(tweetString.split("\\s+"))
            .filter(s -> !s.matches("https|.|\\s+"))
            .toArray(String[]::new);
1 голос
/ 12 марта 2019

На основании моего комментария здесь быстрое решение. (Увеличьте регулярное выражение со всеми вашими ключевыми словами)

 private static void replaceFromRegex(final String text ) {
    String result = text.replaceAll("https($|\\s)| (?<!\\S)[^ ](?!\\S)","");
      System.out.println(result);
  }

и затем тест

  public static void main(String []args) throws Exception{
      replaceFromRegex("new single fallin dropping, , https");
     }

Примечание. Это просто пример, и вам нужно будет улучшить регулярное выражение, чтобы рассмотреть начальное слово (например, строку, начинающуюся с https, затем пробел и т. Д.)

1 голос
/ 12 марта 2019

Вы можете сделать что-то вроде этого:

String[] filtered = Arrays
    .stream(tweetString.split("[ ,]"))
    .filter(str -> str.length() > 1)
    .filter(str -> !str.equals("http"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...