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());
+}
}