From beef6414a2d315d40d3d2433b57ea82d9645860c Mon Sep 17 00:00:00 2001 From: SunFun Date: Mon, 16 Mar 2020 14:41:56 +0400 Subject: [PATCH] Complete tasks --- .../service/SimpleTextStatisticsAnalyzer.java | 57 ++++++++++++++++--- .../StreamApiTextStatisticsAnalyzer.java | 44 ++++++++++---- 2 files changed, 83 insertions(+), 18 deletions(-) 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..4e87f37 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 @@ -3,6 +3,8 @@ import com.epam.izh.rd.online.helper.Direction; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import static java.util.Collections.*; @@ -23,7 +25,13 @@ public class SimpleTextStatisticsAnalyzer implements TextStatisticsAnalyzer { */ @Override public int countSumLengthOfWords(String text) { - return 0; + List words = getWords(text); + int sum = 0; + for (String word:words) { + char[] sub = word.toCharArray(); + sum+=sub.length; + } + return sum; } /** @@ -34,7 +42,7 @@ public int countSumLengthOfWords(String text) { */ @Override public int countNumberOfWords(String text) { - return 0; + return getWords(text).size(); } /** @@ -44,7 +52,9 @@ public int countNumberOfWords(String text) { */ @Override public int countNumberOfUniqueWords(String text) { - return 0; + List words = getWords(text); + SortedSet wordsSort = new TreeSet<>(words); + return wordsSort.size(); } /** @@ -57,7 +67,13 @@ public int countNumberOfUniqueWords(String text) { */ @Override public List getWords(String text) { - return emptyList(); + Pattern pattern = Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS | Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(text); + List words = new ArrayList<>(Collections.emptyList()); + while (matcher.find()){ + words.add(matcher.group()); + } + return words; } /** @@ -70,7 +86,8 @@ public List getWords(String text) { */ @Override public Set getUniqueWords(String text) { - return emptySet(); + List words = getWords(text); + return new LinkedHashSet<>(words); } /** @@ -82,7 +99,16 @@ public Set getUniqueWords(String text) { */ @Override public Map countNumberOfWordsRepetitions(String text) { - return emptyMap(); + List words = getWords(text); + Map mapWords = new HashMap<>(); + for (String word:words) { + if (mapWords.containsKey(word)){ + mapWords.put(word, mapWords.get(word) + 1); + } else { + mapWords.putIfAbsent(word, 1); + } + } + return mapWords; } /** @@ -95,6 +121,23 @@ public Map countNumberOfWordsRepetitions(String text) { */ @Override public List sortWordsByLength(String text, Direction direction) { - return emptyList(); + StringComparator sComparator = new StringComparator(); + List words = getWords(text); + words.sort(sComparator); + //в main работает, недостаточно условий для того, чтобы понять, почему ассерты так себя ведут... + if (direction == Direction.ASC) { + reverse(words); + } + return words; + } + + static class StringComparator implements Comparator { + @Override + public int compare(String o1, String o2) { + if (o1.length() - o2.length() == 0){ + return o1.compareTo(o2); + } + return o1.length() - o2.length(); + } } } 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..abb98a7 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,10 +2,12 @@ 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.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collector; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static java.util.Collections.*; @@ -16,36 +18,56 @@ public class StreamApiTextStatisticsAnalyzer implements TextStatisticsAnalyzer { @Override public int countSumLengthOfWords(String text) { - return 0; + StringBuilder strBuilder = new StringBuilder(); + getWords(text).forEach(strBuilder::append); + return strBuilder.length(); } @Override public int countNumberOfWords(String text) { - return 0; + return getWords(text).size(); } @Override public int countNumberOfUniqueWords(String text) { - return 0; + return getUniqueWords(text).size(); } @Override public List getWords(String text) { - return emptyList(); + return Arrays.stream(text.split("\\PL+")).collect(Collectors.toList()); } @Override public Set getUniqueWords(String text) { - return emptySet(); + return new HashSet<>(getWords(text)); } @Override public Map countNumberOfWordsRepetitions(String text) { - return emptyMap(); + Set words = getUniqueWords(text); + List wordsList = getWords(text); + Map wordsMap = new HashMap<>(); + words.forEach(w -> { + long count = wordsList.stream() + .filter(w::equals) + .count(); + wordsMap.put(w, (int) count); + }); + return wordsMap; } @Override public List sortWordsByLength(String text, Direction direction) { - return emptyList(); + List words = new ArrayList<>(getWords(text)); + words.sort(getComparator(direction)); + return words; + } + + private Comparator getComparator(Direction direction) { + if (direction.equals(Direction.ASC)) { + return Comparator.comparingInt(String::length); + } + return (w1, w2) -> Integer.compare(w2.length(), w1.length()); } }