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..bb585fa 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.*; @@ -13,6 +15,7 @@ *

* При необходимости, можно создать внутри данного класса дополнительные вспомогательные приватные методы. */ + public class SimpleTextStatisticsAnalyzer implements TextStatisticsAnalyzer { /** @@ -23,7 +26,13 @@ public class SimpleTextStatisticsAnalyzer implements TextStatisticsAnalyzer { */ @Override public int countSumLengthOfWords(String text) { - return 0; + int sum=0; + List listText = getWords(text); + + for(String list: listText){ + sum +=list.length(); + } + return sum; } /** @@ -34,7 +43,8 @@ public int countSumLengthOfWords(String text) { */ @Override public int countNumberOfWords(String text) { - return 0; + List listText = getWords(text); + return listText.size(); } /** @@ -44,7 +54,9 @@ public int countNumberOfWords(String text) { */ @Override public int countNumberOfUniqueWords(String text) { - return 0; + + Set setString = getUniqueWords(text); + return setString.size(); } /** @@ -57,7 +69,16 @@ public int countNumberOfUniqueWords(String text) { */ @Override public List getWords(String text) { - return emptyList(); + Pattern pattern = Pattern.compile("[^A-Z a-z\n]"); + Matcher matcher = pattern.matcher(text); + String s = matcher.replaceAll(""); + List list = new ArrayList<>(); + String strings[]; + strings=s.split("[ \n]+"); + for (int i=0; i getWords(String text) { */ @Override public Set getUniqueWords(String text) { - return emptySet(); + Pattern pattern = Pattern.compile("[^A-Z a-z\n]"); + Matcher matcher = pattern.matcher(text); + String s = matcher.replaceAll(""); + Set set = new HashSet<>(); + String strings[]; + strings=s.split("[ \n]+"); + for (int i=0; i getUniqueWords(String text) { */ @Override public Map countNumberOfWordsRepetitions(String text) { - return emptyMap(); + Map map = new HashMap<>(); + List listText = getWords(text); + int numRepeat=0; + for(String s : listText) { + for (String s2 : listText) { + if (s.compareTo(s2) == 0) { + numRepeat++; + } + } + map.put(s, numRepeat); + numRepeat=0; + } + System.out.print(map); + return map; } /** @@ -95,6 +139,17 @@ public Map countNumberOfWordsRepetitions(String text) { */ @Override public List sortWordsByLength(String text, Direction direction) { - return emptyList(); + + List listText= getWords(text); + + + if (direction==Direction.ASC) { + Collections.sort(listText, (o1, o2) -> o1.length() - o2.length()); + } + if (direction==Direction.DESC){ + Collections.sort(listText, (o1, o2) -> -(o1.length() - o2.length())); + } + + return listText; } } 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..ccc10a3 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.lang.reflect.Array; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static java.util.Collections.*; @@ -16,36 +18,67 @@ public class StreamApiTextStatisticsAnalyzer implements TextStatisticsAnalyzer { @Override public int countSumLengthOfWords(String text) { - return 0; + List listText = getWords(text); + return listText.stream().reduce(0, (sum, s) -> sum += s.length(), Integer::sum); } @Override public int countNumberOfWords(String text) { - return 0; + + return (int)getWords(text).stream().count(); } @Override - public int countNumberOfUniqueWords(String text) { - return 0; + public int countNumberOfUniqueWords(String text) + { + return (int)getWords(text).stream().distinct().count(); } @Override public List getWords(String text) { - return emptyList(); + Pattern pattern = Pattern.compile("[^A-Z a-z\n]"); + Matcher matcher = pattern.matcher(text); + String s = matcher.replaceAll(""); + + String strings[]; + strings=s.split("[ \n]+"); + List list = Arrays.stream(strings).collect(Collectors.toList()); + return list; } @Override public Set getUniqueWords(String text) { - return emptySet(); + Pattern pattern = Pattern.compile("[^A-Z a-z\n]"); + Matcher matcher = pattern.matcher(text); + String s = matcher.replaceAll(""); + + String strings[]; + strings=s.split("[ \n]+"); + Set set = Arrays.stream(strings).collect(Collectors.toSet()); + return set; } @Override public Map countNumberOfWordsRepetitions(String text) { - return emptyMap(); + List stringList = getWords(text); + Set stringSet = new HashSet<>(stringList); + Map stringIntegerMap = new HashMap<>(); + stringSet.stream().forEach((m) -> stringIntegerMap.put(m,getRepeat(m, stringList))); + return stringIntegerMap; + } + private int getRepeat(String word, List list) { + return (int) list.stream().filter(s -> s.equals(word)).count(); } @Override public List sortWordsByLength(String text, Direction direction) { - return emptyList(); + if(direction==Direction.ASC){ + return getWords(text).stream().sorted((o1, o2) -> o1.length() - o2.length()).collect(Collectors.toList()); + } + if(direction==Direction.DESC){ + return getWords(text).stream().sorted((o1, o2) -> -(o1.length() - o2.length())).collect(Collectors.toList()); + } + return null; + } }