From f37ffbcafad41926b7b31afe68f1b443adc58463 Mon Sep 17 00:00:00 2001 From: Danil Mitusov Date: Tue, 9 Jun 2020 22:45:28 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D1=8B=20=D0=B2=D1=81=D0=B5=20=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D0=BE=D0=B4=D1=8B=20=D0=B2=20=D0=BA=D0=BB=D0=B0=D1=81?= =?UTF-8?q?=D1=81=D0=B5=20SimpleTextStatisticsAnalyzer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/epam/izh/rd/online/Main.java | 5 +---- .../service/SimpleTextStatisticsAnalyzer.java | 22 ++++++++++++------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/epam/izh/rd/online/Main.java b/src/main/java/com/epam/izh/rd/online/Main.java index 3f661d6..ee00f31 100644 --- a/src/main/java/com/epam/izh/rd/online/Main.java +++ b/src/main/java/com/epam/izh/rd/online/Main.java @@ -1,11 +1,8 @@ package com.epam.izh.rd.online; -import java.io.IOException; -import java.net.URISyntaxException; - public class Main { - public static void main(String[] args) throws IOException, URISyntaxException { + public static void main(String[] args) { } } 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..dd4c672 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 @@ -1,7 +1,6 @@ package com.epam.izh.rd.online.service; import com.epam.izh.rd.online.helper.Direction; - import java.util.*; import static java.util.Collections.*; @@ -23,7 +22,8 @@ public class SimpleTextStatisticsAnalyzer implements TextStatisticsAnalyzer { */ @Override public int countSumLengthOfWords(String text) { - return 0; + return text.replaceAll("[,!-.\t\n\\s;:\"')(*%#@$+=]", + "").length(); } /** @@ -34,7 +34,7 @@ public int countSumLengthOfWords(String text) { */ @Override public int countNumberOfWords(String text) { - return 0; + return new ArrayList<>(Arrays.asList(text.split("\\W+"))).size(); } /** @@ -44,7 +44,7 @@ public int countNumberOfWords(String text) { */ @Override public int countNumberOfUniqueWords(String text) { - return 0; + return new HashSet<>(Arrays.asList(text.split("\\W+"))).size(); } /** @@ -57,7 +57,7 @@ public int countNumberOfUniqueWords(String text) { */ @Override public List getWords(String text) { - return emptyList(); + return new ArrayList<>(Arrays.asList(text.split("\\W+"))); } /** @@ -70,7 +70,7 @@ public List getWords(String text) { */ @Override public Set getUniqueWords(String text) { - return emptySet(); + return new HashSet<>(Arrays.asList(text.split("\\W+"))); } /** @@ -82,7 +82,12 @@ public Set getUniqueWords(String text) { */ @Override public Map countNumberOfWordsRepetitions(String text) { - return emptyMap(); + Map amountOfWordsRepetitions = new Hashtable<>(); + + for (String s : getUniqueWords(text)) { + amountOfWordsRepetitions.put(s, Collections.frequency(getWords(text), s)); + } + return amountOfWordsRepetitions; } /** @@ -95,6 +100,7 @@ public Map countNumberOfWordsRepetitions(String text) { */ @Override public List sortWordsByLength(String text, Direction direction) { - return emptyList(); + + return null; } } From 2e187d73720e874d3c9204179a773f79024410cd Mon Sep 17 00:00:00 2001 From: Danil Mitusov Date: Wed, 10 Jun 2020 11:54:15 +0300 Subject: [PATCH 2/2] finished all methods, all tests were passed --- java-collections.iml | 24 +++++++++++ .../service/SimpleTextStatisticsAnalyzer.java | 22 ++++++---- .../StreamApiTextStatisticsAnalyzer.java | 42 +++++++++++++------ 3 files changed, 69 insertions(+), 19 deletions(-) create mode 100644 java-collections.iml diff --git a/java-collections.iml b/java-collections.iml new file mode 100644 index 0000000..dd43669 --- /dev/null +++ b/java-collections.iml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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 dd4c672..0eaf6c4 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 @@ -1,9 +1,11 @@ package com.epam.izh.rd.online.service; import com.epam.izh.rd.online.helper.Direction; + import java.util.*; -import static java.util.Collections.*; +import static com.epam.izh.rd.online.helper.Direction.ASC; + /** * Совет: @@ -22,7 +24,7 @@ public class SimpleTextStatisticsAnalyzer implements TextStatisticsAnalyzer { */ @Override public int countSumLengthOfWords(String text) { - return text.replaceAll("[,!-.\t\n\\s;:\"')(*%#@$+=]", + return text.replaceAll("[\\p{Punct}\\s]+", "").length(); } @@ -34,7 +36,7 @@ public int countSumLengthOfWords(String text) { */ @Override public int countNumberOfWords(String text) { - return new ArrayList<>(Arrays.asList(text.split("\\W+"))).size(); + return getWords(text).size(); } /** @@ -44,7 +46,7 @@ public int countNumberOfWords(String text) { */ @Override public int countNumberOfUniqueWords(String text) { - return new HashSet<>(Arrays.asList(text.split("\\W+"))).size(); + return new HashSet<>(getWords(text)).size(); } /** @@ -70,7 +72,7 @@ public List getWords(String text) { */ @Override public Set getUniqueWords(String text) { - return new HashSet<>(Arrays.asList(text.split("\\W+"))); + return new HashSet<>(getWords(text)); } /** @@ -100,7 +102,13 @@ public Map countNumberOfWordsRepetitions(String text) { */ @Override public List sortWordsByLength(String text, Direction direction) { - - return null; + List wordsByLength = getWords(text); + if (direction.equals(ASC)) { + wordsByLength.sort(((o1, o2) -> o1.length() - o2.length())); + } else { + wordsByLength.sort(((o1, o2) -> -(o1.length() - o2.length()))); + } + return wordsByLength; } } + 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..1146221 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,11 @@ 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 static java.util.Collections.*; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; + /** * Данный класс обязан использовать StreamApi из функционала Java 8. Функциональность должна быть идентична @@ -16,36 +15,55 @@ public class StreamApiTextStatisticsAnalyzer implements TextStatisticsAnalyzer { @Override public int countSumLengthOfWords(String text) { - return 0; + return getWords(text) + .stream() + .mapToInt(String::length) + .sum(); } @Override public int countNumberOfWords(String text) { - return 0; + return getWords(text) + .size(); } @Override public int countNumberOfUniqueWords(String text) { - return 0; + return new HashSet<>(getWords(text)) + .size(); } @Override public List getWords(String text) { - return emptyList(); + Stream stream = Stream.of(text.split("\\W+")); + return stream + .collect(Collectors.toList()); } @Override public Set getUniqueWords(String text) { - return emptySet(); + return new HashSet<>(getWords(text)); } @Override public Map countNumberOfWordsRepetitions(String text) { - return emptyMap(); + return getWords(text) + .stream() + .collect(Collectors + .toMap(word -> word, word -> 1, Integer::sum)); } @Override public List sortWordsByLength(String text, Direction direction) { - return emptyList(); + return getWords(text) + .stream() + .sorted(getStringComparator(direction)) + .collect(Collectors.toList()); + } + + private Comparator getStringComparator(Direction direction) { + return direction.equals(Direction.ASC) ? + Comparator.comparing(String::length) : + Comparator.comparing(String::length).reversed(); } }