diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java b/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java index 32f8e35..f6afa52 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleTextStatisticsAnalyzer.java @@ -2,9 +2,12 @@ import com.epam.izh.rd.online.helper.Direction; +import java.lang.reflect.Array; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; -import static java.util.Collections.*; +import static java.util.Collections.emptyList; /** * Совет: @@ -23,7 +26,8 @@ public class SimpleTextStatisticsAnalyzer implements TextStatisticsAnalyzer { */ @Override public int countSumLengthOfWords(String text) { - return 0; + int count = text.replaceAll("\\W+", "").length(); + return count; } /** @@ -34,7 +38,8 @@ public int countSumLengthOfWords(String text) { */ @Override public int countNumberOfWords(String text) { - return 0; + int count = getWords(text).size(); + return count; } /** @@ -44,7 +49,8 @@ public int countNumberOfWords(String text) { */ @Override public int countNumberOfUniqueWords(String text) { - return 0; + int count = getUniqueWords(text).size(); + return count; } /** @@ -57,7 +63,12 @@ public int countNumberOfUniqueWords(String text) { */ @Override public List getWords(String text) { - return emptyList(); + List list = new ArrayList<>(); + String[] splStr = text.replaceAll("\\W+", " ").split(" "); + for (String elem : splStr){ + list.add(elem); + } + return list; } /** @@ -70,7 +81,9 @@ public List getWords(String text) { */ @Override public Set getUniqueWords(String text) { - return emptySet(); + Set uniq = new HashSet<>(getWords(text)) ; + + return uniq; } /** @@ -82,9 +95,16 @@ public Set getUniqueWords(String text) { */ @Override public Map countNumberOfWordsRepetitions(String text) { - return emptyMap(); + Map keyValue = new HashMap(); + for (String elem : getWords(text)){ + Integer k = Collections.frequency(getWords(text),elem); + keyValue.put(elem,k); + } + return keyValue; } + + /** * Необходимо реализовать функционал вывода слов из текста в отсортированном виде (по длине) в зависимости от параметра direction. * Например для текста "Hello, Hi, mother, father - good, cat, c!!" должны вернуться результаты : @@ -95,6 +115,25 @@ public Map countNumberOfWordsRepetitions(String text) { */ @Override public List sortWordsByLength(String text, Direction direction) { - return emptyList(); + List rez2Word = new ArrayList<>(); + String [] strArr = new String[getWords(text).size()]; + for (int i = 0; i < getWords(text).size(); i++) { + strArr[i] = getWords(text).get(i); + } + for(int i=0;istrArr[j].length()){ + String temp= strArr[i]; + strArr[i]=strArr[j]; + strArr[j]=temp; + } + } + } + rez2Word.addAll(Arrays.asList(strArr)); + if (direction.equals(Direction.DESC)){ + Collections.reverse(rez2Word); + return rez2Word; + } + return rez2Word; } } diff --git a/src/main/java/com/epam/izh/rd/online/service/StreamApiTextStatisticsAnalyzer.java b/src/main/java/com/epam/izh/rd/online/service/StreamApiTextStatisticsAnalyzer.java index e9b8957..036bf5d 100644 --- a/src/main/java/com/epam/izh/rd/online/service/StreamApiTextStatisticsAnalyzer.java +++ b/src/main/java/com/epam/izh/rd/online/service/StreamApiTextStatisticsAnalyzer.java @@ -2,12 +2,15 @@ import com.epam.izh.rd.online.helper.Direction; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collector; +import java.util.stream.Collectors; +import java.util.stream.IntStream; import static java.util.Collections.*; +import static java.util.stream.Collectors.averagingInt; +import static java.util.stream.Collectors.counting; /** * Данный класс обязан использовать StreamApi из функционала Java 8. Функциональность должна быть идентична @@ -16,36 +19,49 @@ public class StreamApiTextStatisticsAnalyzer implements TextStatisticsAnalyzer { @Override public int countSumLengthOfWords(String text) { - return 0; + int count =getWords(text).stream().collect(Collectors.summingInt(s->s.length())); + return count; } @Override public int countNumberOfWords(String text) { - return 0; + long count = getWords(text).stream().count(); + return (int) count; } @Override public int countNumberOfUniqueWords(String text) { - return 0; + int count = (int) getWords(text).stream().distinct().count(); + return count; } @Override public List getWords(String text) { - return emptyList(); + String[] splStr = text.replaceAll("\\W+", " ").split(" "); + List words = Arrays.stream(splStr).collect(Collectors.toList()); + return words; } @Override public Set getUniqueWords(String text) { - return emptySet(); + Set uniq = getWords(text).stream().collect(Collectors.toSet()); + return uniq; } @Override public Map countNumberOfWordsRepetitions(String text) { - return emptyMap(); + return getWords(text).stream().collect(Collectors.toMap(s -> s,s -> 1,Integer::sum)); } @Override public List sortWordsByLength(String text, Direction direction) { - return emptyList(); + ArrayList wordSort = new ArrayList<>(); + wordSort.addAll(getWords(text).stream().sorted(Comparator.comparing(String::length)).collect(Collectors.toList())); + if (direction.equals(Direction.ASC)) { + return wordSort; + } else { + reverse(wordSort); + return wordSort; + } } }