diff --git a/java-data-handling-template.iml b/java-data-handling-template.iml new file mode 100644 index 00000000..5e9ffdc5 --- /dev/null +++ b/java-data-handling-template.iml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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 8306d877..0f6d90b2 100644 --- a/src/main/java/com/epam/izh/rd/online/Main.java +++ b/src/main/java/com/epam/izh/rd/online/Main.java @@ -1,4 +1,9 @@ package com.epam.izh.rd.online; + + public class Main { + public static void main(String[] args) { + + } } 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..fefb2c1d 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,9 @@ package com.epam.izh.rd.online.repository; + +import java.io.*; +import java.util.Objects; + public class SimpleFileRepository implements FileRepository { /** @@ -8,9 +12,18 @@ public class SimpleFileRepository implements FileRepository { * @param path путь до директори * @return файлов, в том числе скрытых */ + @Override public long countFilesInDirectory(String path) { - return 0; + File file = new File(Objects.requireNonNull(getClass() + .getClassLoader().getResource(path)).getFile()); + int count = 0; + for (File f : Objects.requireNonNull(file.listFiles())) { + if (f.isDirectory()) { + count += countFilesInDirectory(path + "/" + f.getName()); + } else count++; + } + return count; } /** @@ -21,7 +34,16 @@ public long countFilesInDirectory(String path) { */ @Override public long countDirsInDirectory(String path) { - return 0; + File file = new File(Objects.requireNonNull(getClass().getClassLoader() + .getResource(path)).getFile()); + int count = 0; + if (file.isDirectory()) { + for (File f : Objects.requireNonNull(file.listFiles())) { + count += countDirsInDirectory(path + "/" + f.getName()); + } + count++; + } + return count; } /** @@ -32,7 +54,7 @@ public long countDirsInDirectory(String path) { */ @Override public void copyTXTFiles(String from, String to) { - return; + } /** @@ -44,6 +66,13 @@ public void copyTXTFiles(String from, String to) { */ @Override public boolean createFile(String path, String name) { + File file = new File(Objects.requireNonNull(getClass() + .getClassLoader().getResource(path)).getFile() + File.separator + name); + try { + return file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } return false; } @@ -55,6 +84,14 @@ public boolean createFile(String path, String name) { */ @Override public String readFileFromResources(String fileName) { - return null; + String path = Objects.requireNonNull(getClass().getClassLoader() + .getResource(fileName)).getPath(); + String readStr = null; + try (BufferedReader reader = new BufferedReader(new FileReader(path))) { + readStr = reader.readLine(); + } catch (IOException e) { + e.printStackTrace(); + } + return readStr; } } 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..3f8c59c6 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 @@ -2,18 +2,20 @@ import java.math.BigDecimal; import java.math.BigInteger; +import java.math.RoundingMode; public class SimpleBigNumbersService implements BigNumbersService { /** * Метод делит первое число на второе с заданной точностью * Например 1/3 с точностью 2 = 0.33 + * * @param range точность * @return результат */ @Override public BigDecimal getPrecisionNumber(int a, int b, int range) { - return null; + return new BigDecimal(a).divide(new BigDecimal(b), range, RoundingMode.FLOOR); } /** @@ -24,6 +26,14 @@ public BigDecimal getPrecisionNumber(int a, int b, int range) { */ @Override public BigInteger getPrimaryNumber(int range) { - return null; + BigInteger one = new BigInteger("1"); + BigInteger two = new BigInteger("2"); + while (range > 0) { + one = one.add(two); + if (one.isProbablePrime(3)) { + range--; + } + } + return one; } } 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..7a908251 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 @@ -2,7 +2,11 @@ import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.Year; import java.time.format.DateTimeFormatter; +import java.util.stream.IntStream; + +import static java.time.LocalDate.now; public class SimpleDateService implements DateService { @@ -14,7 +18,7 @@ public class SimpleDateService implements DateService { */ @Override public String parseDate(LocalDate localDate) { - return null; + return localDate.format(DateTimeFormatter.ofPattern("dd-MM-yyyy")); } /** @@ -25,7 +29,7 @@ public String parseDate(LocalDate localDate) { */ @Override public LocalDateTime parseString(String string) { - return null; + return LocalDateTime.parse(string, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")); } /** @@ -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,10 @@ public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter forma */ @Override public long getNextLeapYear() { - return 0; + return IntStream.range(now().getYear(), now().getYear() + 8) + .filter(Year::isLeap) + .findFirst() + .getAsInt(); } /** @@ -57,8 +64,12 @@ public long getNextLeapYear() { */ @Override public long getSecondsInYear(int year) { - return 0; + long seconds; + if (Year.isLeap(year)) { + seconds = 366 * 24 * 60 * 60; + } else { + seconds = 365 * 24 * 60 * 60; + } + return seconds; } - - } 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..b2508c81 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.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class SimpleRegExpService implements RegExpService { /** @@ -11,7 +19,22 @@ public class SimpleRegExpService implements RegExpService { */ @Override public String maskSensitiveData() { - return null; + String path = Objects.requireNonNull(getClass().getClassLoader() + .getResource("sensitive_data.txt")).getPath(); + Pattern pattern = Pattern.compile("\\d{4}\\s(\\d{4}\\s\\d{4})\\s\\d{4}"); + StringBuffer buf = new StringBuffer(); + try (BufferedReader reader = new BufferedReader(new FileReader(path))) { + String readStr = reader.readLine(); + Matcher matcher = pattern.matcher(readStr); + while (matcher.find()) { + matcher.appendReplacement(buf, matcher.group(). + replaceAll(matcher.group(1), "**** ****")); + } + matcher.appendTail(buf); + } catch (IOException e) { + e.printStackTrace(); + } + return buf.toString(); } /** @@ -22,6 +45,16 @@ public String maskSensitiveData() { */ @Override public String replacePlaceholders(double paymentAmount, double balance) { + String path = Objects.requireNonNull(getClass().getClassLoader() + .getResource("sensitive_data.txt")).getPath(); + try (BufferedReader bufferedReader = new BufferedReader(new FileReader(path))) { + String line = bufferedReader.readLine(); + line = line.replaceAll("(\\$\\{(payment_amount)})", String.valueOf((int) paymentAmount)); + line = line.replaceAll("(\\$\\{(balance)})", String.valueOf((int) balance)); + return line; + } catch (IOException e) { + e.printStackTrace(); + } return null; } } 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..98c05fba 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,83 @@ package com.epam.izh.rd.online.service; + 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.replaceAll(remove, ""); } /** * Реализовать функционал проверки на то, что строка заканчивается знаком вопроса. - * + *

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

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

* Например для строки "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 + String[] str = text.toLowerCase().split(""); + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < str.length; i++) { + if (i % 2 != 0) { + builder.append(str[i].toUpperCase()); + } else { + builder.append(str[i]); + } + } + return builder.toString(); } /** * Метод определяет, является ли строка палиндромом. - * + *

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

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