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