arrayNumbers = new ArrayList<>();
+ for (int i = 2; i < numbers.length; i++) {
+ numbers[i] = i;
+ if (BigInteger.valueOf(numbers[i]).isProbablePrime(i)) {
+ arrayNumbers.add(BigInteger.valueOf(numbers[i]));
+ }
+ }
+ return arrayNumbers.get(range);
}
}
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..cc4718af 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,12 @@
import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.time.Year;
+import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalField;
+import java.util.GregorianCalendar;
+import java.util.regex.Pattern;
public class SimpleDateService implements DateService {
@@ -14,9 +19,16 @@ public class SimpleDateService implements DateService {
*/
@Override
public String parseDate(LocalDate localDate) {
- return null;
+ String month = "0";
+ if (localDate.getMonthValue() < 10) {
+ month = month + localDate.getMonthValue();
+ } else {
+ month = "" + localDate.getMonthValue();
+ }
+ return String.format("%d-%2s-%d", localDate.getDayOfMonth(), month, localDate.getYear());
}
+
/**
* Метод парсит строку в дату
*
@@ -25,7 +37,12 @@ public String parseDate(LocalDate localDate) {
*/
@Override
public LocalDateTime parseString(String string) {
- return null;
+ int year = Integer.parseInt(string.substring(0, 4));
+ int mount = Integer.parseInt(string.substring(5, 7));
+ int days = Integer.parseInt(string.substring(8, 10));
+ int hours = Integer.parseInt(string.substring(11, 13));
+ int minutes = Integer.parseInt(string.substring(14, 16));
+ return LocalDateTime.of(year, mount, days, hours, minutes);
}
/**
@@ -37,7 +54,7 @@ public LocalDateTime parseString(String string) {
*/
@Override
public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter formatter) {
- return null;
+ return localDate.format(formatter);
}
/**
@@ -47,7 +64,12 @@ public String convertToCustomFormat(LocalDate localDate, DateTimeFormatter forma
*/
@Override
public long getNextLeapYear() {
- return 0;
+ long year = Year.now().getValue();
+ do {
+ year++;
+ } while (!Year.isLeap(year));
+
+ return year;
}
/**
@@ -57,7 +79,14 @@ public long getNextLeapYear() {
*/
@Override
public long getSecondsInYear(int year) {
- return 0;
+ int daysInYear = 365;
+ int hoursInDay = 24;
+ int minutesInHours = 60;
+ int secondsInMinutes = 60;
+ if (Year.isLeap(year)) {
+ daysInYear = 366;
+ }
+ return daysInYear * hoursInDay * minutesInHours * secondsInMinutes;
}
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..45c6b1fc 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,17 +15,55 @@ public class SimpleRegExpService implements RegExpService {
*/
@Override
public String maskSensitiveData() {
- return null;
+ String allMaskedText = "";
+ try (FileReader fileReader = new FileReader("src/main/resources/sensitive_data.txt");
+ BufferedReader bufferedReader = new BufferedReader(fileReader);
+ ) {
+ String allText = bufferedReader.readLine();
+ Pattern pattern = Pattern.compile("\\b([0-9]{4})\\s[0-9]{0,9}\\s[0-9]{0,9}\\s([0-9]{4})\\b");
+ Matcher matcher = pattern.matcher(allText);
+ String maskForCard = "$1 **** **** $2";
+ if (matcher.find()) {
+ allMaskedText = matcher.replaceAll(maskForCard);
+ }
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return allMaskedText;
}
/**
- * Метод должен считыввать файл sensitive_data.txt (из директории resources) и заменять плейсхолдер ${payment_amount} и ${balance} на заданные числа. Метод должен
+ * Метод должен считывать файл sensitive_data.txt (из директории resources) и заменять плейсхолдер ${payment_amount} и ${balance} на заданные числа. Метод должен
* содержать регулярное выражение для поиска плейсхолдеров
*
* @return обработанный текст
*/
@Override
public String replacePlaceholders(double paymentAmount, double balance) {
- return null;
+ String replacePlaceholderAllText = "";
+ try (FileReader fileReader = new FileReader("src/main/resources/sensitive_data.txt");
+ BufferedReader bufferedReader = new BufferedReader(fileReader);
+ ) {
+ String allText = bufferedReader.readLine();
+ Pattern patternForBalance = Pattern.compile("\\$\\{balance\\}");
+ Matcher matcherBalance = patternForBalance.matcher(allText);
+ String balanceReplace = String.format("%.0f", balance);
+ String paymentReplace = String.format("%.0f", paymentAmount);
+ if (matcherBalance.find()) {
+ String replacePlaceholderBalance = matcherBalance.replaceAll(balanceReplace);
+ Pattern patternForPayment = Pattern.compile("\\$\\{payment_amount\\}");
+ Matcher matcherPayment = patternForPayment.matcher(replacePlaceholderBalance);
+ if (matcherPayment.find()) {
+ replacePlaceholderAllText = matcherPayment.replaceAll(paymentReplace);
+ }
+ }
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return replacePlaceholderAllText;
}
}
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..16d09bac 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,110 @@
package com.epam.izh.rd.online.service;
+import java.util.Arrays;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
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
+ Pattern pattern = Pattern.compile(remove);
+ Matcher matcher = pattern.matcher(base);
+ String removeBase = "";
+ if (matcher.find()) {
+ removeBase = matcher.replaceAll("");
+ } else {
+ return base;
+ }
+ return removeBase; //TODO
}
/**
* Реализовать функционал проверки на то, что строка заканчивается знаком вопроса.
- *
+ *
* Например для строки "Hello, hello, hello, how low?" метод вернет true
* Например для строки "Hello, hello, hello!" метод вернет false
*/
@Override
public boolean isQuestionString(String text) {
- return false; //TODO
+ Pattern pattern = Pattern.compile(".$");
+ Matcher matcher = pattern.matcher(text);
+ if (matcher.find()) {
+ return matcher.group().equals("?");
+ }
+ return false;
+ //TODO
}
/**
* Реализовать функционал соединения переданных строк.
- *
+ *
* Например для параметров {"Smells", " ", "Like", " ", "Teen", " ", "Spirit"}
* метод вернет "Smells Like Teen Spirit"
*/
@Override
public String concatenate(String... elements) {
- return null; //TODO
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < elements.length; i++) {
+ builder.append(elements[i]);
+ }
+ String returnedString = String.valueOf(builder);
+ return returnedString; //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
+ String textToLowerCase = text.toLowerCase();
+ String textToUpperCase = text.toUpperCase();
+ char[] charsLower = textToLowerCase.toCharArray();
+ char[] charsUpper = textToUpperCase.toCharArray();
+ char[] charsArray = new char[charsLower.length];
+ for (int i = 0; i < charsLower.length; i++) {
+ if (i % 2 == 0) {
+ charsArray[i] = charsLower[i];
+ } else {
+ charsArray[i] = charsUpper[i];
+ }
+ }
+ String fes = String.valueOf(charsArray);
+
+
+ return fes; //TODO
}
/**
* Метод определяет, является ли строка палиндромом.
- *
+ *
* Палиндром - строка, которая одинаково читается слева направо и справа налево.
- *
+ *
* Например для строки "а роза упала на лапу Азора" вернется true, а для "я не палиндром" false
*/
@Override
public boolean isPalindrome(String string) {
- return false; //TODO
+ String palindrome = string.replace(" ", "").toLowerCase();
+ StringBuilder palindromeBuilder = new StringBuilder(palindrome);
+ StringBuilder palindromeBuilderReverse = palindromeBuilder.reverse();
+ String palindromeReverse = String.valueOf(palindromeBuilderReverse);
+ if (!string.equals("")) {
+ return palindrome.equals(palindromeReverse);
+ } else {
+ return false;
+ }
}
}
diff --git a/src/main/resources/sensitive_data.txt b/src/main/resources/sensitive_data.txt
index 4041aa51..58e01a12 100644
--- a/src/main/resources/sensitive_data.txt
+++ b/src/main/resources/sensitive_data.txt
@@ -1 +1 @@
-Вчера вечером со счета номер 4301 0234 2145 2140 был совершен перевод на счет 5042 2012 0532 2043 в размере ${payment_amount} рублей. На счету осталось ${balance} рублей
+Вчера вечером со счета номер 4301 0234 2145 2140 был совершен перевод на счет 5042 2012 0532 2043 в размере ${payment_amount} рублей. На счету осталось ${balance} рублей
\ No newline at end of file