From 92ae226cd0259d90f5f9a93054e54be4d3953439 Mon Sep 17 00:00:00 2001 From: Anton Samsonov Date: Fri, 26 Jun 2020 07:33:35 +0300 Subject: [PATCH] completed --- java-data-handling-template.iml | 23 ++++++ pom.xml | 4 +- .../repository/SimpleFileRepository.java | 76 ++++++++++++++++++- .../service/SimpleBigNumbersService.java | 12 ++- .../rd/online/service/SimpleDateService.java | 27 +++++-- .../online/service/SimpleRegExpService.java | 51 ++++++++++++- .../rd/online/service/SimpleTextService.java | 48 ++++++++---- 7 files changed, 213 insertions(+), 28 deletions(-) create mode 100644 java-data-handling-template.iml diff --git a/java-data-handling-template.iml b/java-data-handling-template.iml new file mode 100644 index 00000000..e5f71190 --- /dev/null +++ b/java-data-handling-template.iml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index d02d643e..90de165a 100644 --- a/pom.xml +++ b/pom.xml @@ -33,8 +33,8 @@ org.apache.maven.plugins maven-compiler-plugin - ${java.version} - ${java.version} + 9 + 9 diff --git a/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java b/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java index 1783b845..c68ae3ce 100644 --- a/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java +++ b/src/main/java/com/epam/izh/rd/online/repository/SimpleFileRepository.java @@ -1,5 +1,18 @@ package com.epam.izh.rd.online.repository; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileFilter; +import java.io.IOException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Stream; + public class SimpleFileRepository implements FileRepository { /** @@ -10,9 +23,26 @@ public class SimpleFileRepository implements FileRepository { */ @Override public long countFilesInDirectory(String path) { - return 0; + long count; + Path filePath = Paths.get(path); + File file; + if (filePath.isAbsolute()){ + file = new File(path); + } else { + file = new File(Objects.requireNonNull(getClass().getClassLoader().getResource(path)).getFile()); + } + + count = new File(file.getPath()).listFiles(File::isFile).length; + List directories = Arrays.asList(new File(file.getPath()).listFiles(File::isDirectory)); + for (File directory : directories) { + count += countFilesInDirectory(directory.toPath().toString()); + + } + + return count; } + /** * Метод рекурсивно подсчитывает количество папок в директории, считая корень * @@ -21,7 +51,23 @@ public long countFilesInDirectory(String path) { */ @Override public long countDirsInDirectory(String path) { - return 0; + int count = 0; + Path filePath = Paths.get(path); + File file; + if (filePath.isAbsolute()){ + file = new File(path); + } else { + count++; + file = new File(Objects.requireNonNull(getClass().getClassLoader().getResource(path)).getFile()); + } + + List directories = Arrays.asList(Objects.requireNonNull(new File(file.getPath()).listFiles(File::isDirectory))); + count += directories.size(); + for(File directory : directories) { + count += countDirsInDirectory(directory.toString()); + } + + return count; } /** @@ -43,8 +89,22 @@ public void copyTXTFiles(String from, String to) { * @return был ли создан файл */ @Override - public boolean createFile(String path, String name) { + public boolean createFile(String path, String name){ + ClassLoader classLoader = getClass().getClassLoader(); + URL resource = classLoader.getResource(path); + File file; + if (resource != null) { + file = new File(resource.getFile(), name); + } else { + file = new File("", name); + } //c + try{ + return file.createNewFile(); + } catch (IOException e){ + System.out.println(e.getMessage()); + } return false; + } /** @@ -55,6 +115,14 @@ public boolean createFile(String path, String name) { */ @Override public String readFileFromResources(String fileName) { - return null; + File file = new File(Objects.requireNonNull(getClass().getClassLoader().getResource(fileName)).getFile()); + String value = ""; + try (BufferedReader reader = Files.newBufferedReader(file.toPath())) { + value = reader.readLine(); + } catch (Exception e) { + System.err.println(e.getMessage()); + } + return value; + } } diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleBigNumbersService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleBigNumbersService.java index a94c7bba..f3678ccd 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleBigNumbersService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleBigNumbersService.java @@ -3,6 +3,8 @@ import java.math.BigDecimal; import java.math.BigInteger; +import static java.math.BigDecimal.ROUND_DOWN; + public class SimpleBigNumbersService implements BigNumbersService { /** @@ -13,7 +15,9 @@ public class SimpleBigNumbersService implements BigNumbersService { */ @Override public BigDecimal getPrecisionNumber(int a, int b, int range) { - return null; + BigDecimal devidend = BigDecimal.valueOf(a); + BigDecimal devider = BigDecimal.valueOf(b); + return devidend.divide(devider, range, ROUND_DOWN); } /** @@ -24,6 +28,10 @@ public BigDecimal getPrecisionNumber(int a, int b, int range) { */ @Override public BigInteger getPrimaryNumber(int range) { - return null; + BigInteger prime = BigInteger.valueOf(2); + for(int i = 0; i < range; i++) { + prime = prime.nextProbablePrime(); + } + return prime; } } diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java index 70d64dfd..2dffb9ef 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleDateService.java @@ -3,6 +3,8 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.Calendar; + public class SimpleDateService implements DateService { @@ -14,7 +16,8 @@ public class SimpleDateService implements DateService { */ @Override public String parseDate(LocalDate localDate) { - return null; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy"); + return localDate.format(formatter); } /** @@ -25,7 +28,8 @@ public String parseDate(LocalDate localDate) { */ @Override public LocalDateTime parseString(String string) { - return null; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); + return LocalDateTime.parse(string, formatter); } /** @@ -37,7 +41,7 @@ public LocalDateTime parseString(String string) { */ @Override public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter formatter) { - return null; + return localDate.format(formatter); } /** @@ -47,7 +51,9 @@ public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter forma */ @Override public long getNextLeapYear() { - return 0; + int year = Calendar.getInstance().get(Calendar.YEAR); + + return year; } /** @@ -57,7 +63,18 @@ public long getNextLeapYear() { */ @Override public long getSecondsInYear(int year) { - return 0; + if (year %100==0 && year %400 ==0 ) + return 31622400; + + else if (year % 4 == 0 && year % 100 > 0) + return 31622400; + + else if (year % 100 == 0) + return 31536000; + + else + return 31536000; + } diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java index b6eff56b..2a174bc6 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleRegExpService.java @@ -1,5 +1,13 @@ package com.epam.izh.rd.online.service; +import java.io.BufferedReader; +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class SimpleRegExpService implements RegExpService { /** @@ -11,7 +19,19 @@ public class SimpleRegExpService implements RegExpService { */ @Override public String maskSensitiveData() { - return null; + String fileName = "D:/IdeaProjects/java-data-handling-template1/src/main/resources/sensitive_data.txt"; + String value = ""; + try (BufferedReader reader = Files.newBufferedReader(Paths.get(fileName))) { + value = reader.readLine(); + Pattern pattern = Pattern.compile("(\\d{4}) (\\d{4}) (\\d{4}) (\\d{4})"); + Matcher matcher = pattern.matcher(value); + if (matcher.find()) { + value = matcher.replaceAll("$1 **** **** $4"); + } + } catch (Exception e) { + System.err.println(e.getMessage()); + } + return value; } /** @@ -22,6 +42,33 @@ public String maskSensitiveData() { */ @Override public String replacePlaceholders(double paymentAmount, double balance) { - return null; + String value = readFile(); + value = value.replaceAll("\\$\\{payment_amount}", format(paymentAmount)); + value = value.replaceAll("\\$\\{balance}", format(balance)); +// Pattern pattern = Pattern.compile("\\{\\D+?\\}"); +// Matcher matcher = pattern.matcher(value); +// if (matcher.find()){ +// value = matcher.replaceAll(String.valueOf(paymentAmount)); +// value = matcher.replaceAll(String.valueOf(balance)); +// } + return value; + } + + private String readFile() { + File file = new File(Objects.requireNonNull(getClass().getClassLoader().getResource("sensitive_data.txt")).getFile()); + String value = ""; + try (BufferedReader reader = Files.newBufferedReader(file.toPath())) { + value = reader.readLine(); + } catch (Exception e) { + System.err.println(e.getMessage()); + } + return value; + } + + private static String format(double d) { + if (d == (long) d) + return String.format("%d", (long) d); + else + return String.format("%s", d); } } diff --git a/src/main/java/com/epam/izh/rd/online/service/SimpleTextService.java b/src/main/java/com/epam/izh/rd/online/service/SimpleTextService.java index 68951fbe..632c1f68 100644 --- a/src/main/java/com/epam/izh/rd/online/service/SimpleTextService.java +++ b/src/main/java/com/epam/izh/rd/online/service/SimpleTextService.java @@ -1,64 +1,86 @@ package com.epam.izh.rd.online.service; +import java.util.Locale; + public class SimpleTextService implements TextService { /** * Реализовать функционал удаления строки из другой строки. - * + *

* Например для базовой строки "Hello, hello, hello, how low?" и строки для удаления ", he" * метод вернет "Hellollollo, how low?" * - * @param base - базовая строка с текстом + * @param base - базовая строка с текстом * @param remove - строка которую необходимо удалить */ @Override public String removeString(String base, String remove) { - return null; //TODO + + return base.replace(remove, ""); //TODO } + /** * Реализовать функционал проверки на то, что строка заканчивается знаком вопроса. - * + *

* Например для строки "Hello, hello, hello, how low?" метод вернет true * Например для строки "Hello, hello, hello!" метод вернет false */ @Override public boolean isQuestionString(String text) { - return false; //TODO + if ((!text.equals(""))) { + return text.charAt(text.length() - 1) == '?'; //TODO + } + return false; } /** * Реализовать функционал соединения переданных строк. - * + *

* Например для параметров {"Smells", " ", "Like", " ", "Teen", " ", "Spirit"} * метод вернет "Smells Like Teen Spirit" */ @Override public String concatenate(String... elements) { - return null; //TODO + + return String.join("", elements); //TODO } /** * Реализовать функционал изменения регистра в вид лесенки. * Возвращаемый текст должен начинаться с прописного регистра. - * + *

* Например для строки "Load Up On Guns And Bring Your Friends" * метод вернет "lOaD Up oN GuNs aNd bRiNg yOuR FrIeNdS". */ @Override public String toJumpCase(String text) { - return null; //TODO + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < text.length(); i++) { + if (i % 2 != 0) { + sb.append(String.valueOf(text.charAt(i)).toUpperCase()); + } else { + sb.append(String.valueOf(text.charAt(i)).toLowerCase()); + + } + } + + return sb.toString(); //TODO } /** * Метод определяет, является ли строка палиндромом. - * + *

* Палиндром - строка, которая одинаково читается слева направо и справа налево. - * + *

* Например для строки "а роза упала на лапу Азора" вернется true, а для "я не палиндром" false */ @Override public boolean isPalindrome(String string) { - return false; //TODO - } + if (string.isEmpty()){ + return false; + } + String stringWithoutSpaces = string.replaceAll(" ", ""); + return stringWithoutSpaces.equalsIgnoreCase(new StringBuilder(stringWithoutSpaces).reverse().toString()); +} }