Как подсчитать частое появление отдельной подстроки (символы Math) в строке с использованием Java или R

Обратите внимание на класс IPAddressUtil OOTB, присутствующий в sun.net.util, который должен вам помочь.

-1
задан Don 13 July 2018 в 12:26
поделиться

3 ответа

Способ с R, разделение строки на каждом space, а затем подсчет вхождений разных элементов:

EDIT С вашей третьей строкой и новым ограничением, если элементы могут быть разделены пробелом или открывающий или закрывающий кронштейн:

str <- "<= < / + * + cos sin (service <= service)+ * hello)rate"
mathsubstring <- c("<=", "<", "/", "+", "cos", "sin")

t_elt <- table(strsplit(str, " |\\(|\\)"))
t_elt[mathsubstring]
<=   <   /   + cos sin 
 2   1   1   3   1   1

Если вы хотите узнать общее количество вхождений математических подстрок:

sum(t_elt[mathsubstring])
#[1] 9

Предыдущий код с предыдущим str

table(strsplit(str, " "))

       *       /       +       <      <=     cos service     sin 
      2       1       3       1       2       1       2       1 

После этого вы можете удалить service (или другие несимметричные символы), если хотите:

tab <- table(strsplit(str, " "))
mathsubstring <- c('<=', '<', '/', '+', 'cos', 'sin')
tab[names(tab) %in% mathsubstring]

С вашей второй строкой:

str = "<= < / + * + cos sin service <= service + * hello rate"
table(strsplit(str, " "))

      *       /       +       <      <=     cos   hello    rate service     sin 
      2       1       3       1       2       1       1       1       2       1

4
ответ дан Cath 17 August 2018 в 12:58
поделиться

Это то, что я сделал:

String str = "<= < / + * + cos sin service <= service + *";
    String[] split = str.split(" ");
    HashMap<String, Integer> map = new HashMap<String, Integer>();
    for (String subString : split) {
        if (!map.containsKey(subString)) {
            map.put(subString, 0);
        }
        Integer current = map.get(subString);
        map.put(subString, ++current);
    }
    for (Map.Entry<String, Integer> entry : map.entrySet()) {
        System.out.println(String.format("%s = %s",entry.getKey(),entry.getValue()));
    }
0
ответ дан Bart 17 August 2018 в 12:58
поделиться

Вы можете использовать сборщики и счетчики.

Arrays.stream(str.split(" "))
      .collect(Collectors.groupingBy(Function.identity(), 
                   Collectors.counting()));

В результате получается Map<String, Long> со следующим содержимым:

{<==2, service=2, cos=1, sin=1, *=2, +=3, <=1, /=1}
0
ответ дан ernest_k 17 August 2018 в 12:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: