fileList, String to) {
+ for (File files : fileList) {
+ fileCopy(files, to);
+ }
+ }
+
+ private void fileCopy(File f, String to) {
+ try {
+ Files.copy(Paths.get(f.getPath()), Paths.get(to + "\\" + f.getName()));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
}
/**
@@ -44,7 +108,28 @@ public void copyTXTFiles(String from, String to) {
*/
@Override
public boolean createFile(String path, String name) {
- return false;
+ return create(path, name);
+ }
+
+ private boolean create(String path, String name) {
+ try {
+ Files.createFile(Paths.get(path + "/" + name));
+ } catch (NoSuchFileException noFile) {
+ noFile.printStackTrace();
+ createDirectory(path);
+ createFile(path, name);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return Files.exists(Paths.get(path + "\\" + name));
+ }
+
+ private void createDirectory(String path) {
+ try {
+ Files.createDirectory(Paths.get(path));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
}
/**
@@ -55,6 +140,16 @@ public boolean createFile(String path, String name) {
*/
@Override
public String readFileFromResources(String fileName) {
- return null;
+ return readFile(fileName);
+ }
+
+ private String readFile(String fileName) {
+ try {
+ Scanner sc = new Scanner(new BufferedInputStream(new FileInputStream("src\\main\\resources\\" + fileName)));
+ return sc.nextLine();
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ return "";
}
}
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..7be09ff7 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.HALF_UP);
}
/**
@@ -24,6 +26,14 @@ public BigDecimal getPrecisionNumber(int a, int b, int range) {
*/
@Override
public BigInteger getPrimaryNumber(int range) {
- return null;
+ BigInteger result = BigInteger.valueOf(3);
+ long count = 0;
+ while (count < range) {
+ if (result.isProbablePrime(range)) {
+ count++;
+ }
+ result = result.add(BigInteger.valueOf(2));
+ }
+ return result.add(BigInteger.valueOf(-2));
}
}
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..d3004f6d 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
@@ -1,7 +1,6 @@
package com.epam.izh.rd.online.service;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
+import java.time.*;
import java.time.format.DateTimeFormatter;
public class SimpleDateService implements DateService {
@@ -14,7 +13,7 @@ public class SimpleDateService implements DateService {
*/
@Override
public String parseDate(LocalDate localDate) {
- return null;
+ return DateTimeFormatter.ofPattern("dd-MM-yyyy").format(localDate);
}
/**
@@ -25,7 +24,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 +36,8 @@ public LocalDateTime parseString(String string) {
*/
@Override
public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter formatter) {
- return null;
+
+ return formatter.format(localDate);
}
/**
@@ -47,7 +47,9 @@ public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter forma
*/
@Override
public long getNextLeapYear() {
- return 0;
+ Year year = Year.now();
+ while (!year.isLeap()) year = year.plusYears(1);
+ return year.getValue();
}
/**
@@ -57,7 +59,7 @@ public long getNextLeapYear() {
*/
@Override
public long getSecondsInYear(int year) {
- return 0;
+ return Year.of(year).length() * 24 * 60 * 60;
}
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..771c6df4 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,9 @@
package com.epam.izh.rd.online.service;
+import java.io.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
public class SimpleRegExpService implements RegExpService {
/**
@@ -11,7 +15,25 @@ public class SimpleRegExpService implements RegExpService {
*/
@Override
public String maskSensitiveData() {
- return null;
+ return findAndReplaceCardNumber(readResourceFileNames("sensitive_data.txt"));
+ }
+
+ private StringBuilder readResourceFileNames(String name) {
+ try (BufferedReader reader = new BufferedReader(new FileReader("src\\main\\resources\\" + name))) {
+ return new StringBuilder(reader.readLine());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return new StringBuilder();
+ }
+
+ private String findAndReplaceCardNumber(StringBuilder text) {
+ Pattern pat = Pattern.compile("\\s*\\d{4}\\s+(\\d{4}\\s+\\d{4})\\s+\\d{4}");
+ Matcher match = pat.matcher(text);
+ while (match.find()) {
+ text.replace(match.start(1), match.end(1), "**** ****");
+ }
+ return text.toString();
}
/**
@@ -22,6 +44,18 @@ public String maskSensitiveData() {
*/
@Override
public String replacePlaceholders(double paymentAmount, double balance) {
- return null;
+ return findAndReplacePlaceholder(paymentAmount, balance, readResourceFileNames("sensitive_data.txt"));
+ }
+
+ private String findAndReplacePlaceholder(double paymentAmount, double balance, StringBuilder text) {
+ String x = text.toString();
+ Pattern pat = Pattern.compile("(\\$\\{p.*[}]).+(\\$\\{b.*[}])");
+ Matcher match = pat.matcher(x);
+ if (match.find()) {
+ text.replace(match.start(2), match.end(2), String.valueOf((int) balance)).
+ replace(match.start(1), match.end(1), String.valueOf((int) paymentAmount));
+ }
+ System.out.println(text);
+ return text.toString();
}
}
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..e11cdbf7 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,75 @@
package com.epam.izh.rd.online.service;
+import java.util.Arrays;
+
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
+ return Arrays.stream(elements).reduce("", String::concat);
}
/**
* Реализовать функционал изменения регистра в вид лесенки.
* Возвращаемый текст должен начинаться с прописного регистра.
- *
+ *
* Например для строки "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[] result = text.toLowerCase().split("\\.*");
+ for (int i = 1; i < result.length; i += 2) {
+ result[i] = result[i].toUpperCase();
+ }
+ return Arrays.stream(result).reduce("", String::concat);
}
/**
* Метод определяет, является ли строка палиндромом.
- *
+ *
* Палиндром - строка, которая одинаково читается слева направо и справа налево.
- *
+ *
* Например для строки "а роза упала на лапу Азора" вернется true, а для "я не палиндром" false
*/
@Override
public boolean isPalindrome(String string) {
- return false; //TODO
+ if (string.length() > 0) {
+ String line = Arrays.stream(string.toLowerCase().split("\\s*")).reduce("", String::concat);
+ String reverse = new StringBuffer(line).reverse().toString();
+ return line.equals(reverse);
+ }
+ return false;
}
}
diff --git a/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java b/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java
index 87dad34f..c8e9609e 100644
--- a/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java
+++ b/src/test/java/com/epam/izh/rd/online/FileRepositoryTest.java
@@ -9,6 +9,8 @@
import java.io.File;
import java.net.URL;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -50,7 +52,6 @@ void testCountFilesInDirectory() {
@DisplayName("Тест метода FileRepository.createFile(String path)")
void testCreateFile() {
fileRepository.createFile(TEST_DIR_CREATE_PATH, TEST_FILE_TO_CREATE);
-
assertTrue(getFile(TEST_DIR_CREATE_PATH + "/" + TEST_FILE_TO_CREATE).exists());
}
@@ -62,11 +63,7 @@ void testReadFileFromResources() {
private File getFile(String path) {
- ClassLoader classLoader = getClass().getClassLoader();
- URL resource = classLoader.getResource(path);
- if (resource != null) {
- return new File(resource.getFile());
- }
- return new File("");
+ Path resource = Paths.get(path);
+ return new File(String.valueOf(resource));
}
}