Finishing bonus parts

This commit is contained in:
2026-07-17 22:37:38 +03:30
parent b754df02ed
commit 42152d683b
+110 -6
View File
@@ -20,7 +20,7 @@ public class BonusExercises {
- Each segment (between dots) must follow same hyphen rules
*/
public boolean validateEmail(String email) {
String regex = ""; // todo
String regex = "^[a-zA-Z0-9_+-]+(?:\\.[a-zA-Z0-9_+-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z0-9-]+$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(email);
@@ -38,11 +38,31 @@ public class BonusExercises {
If no match for a date is found in the string, return null.
*/
public String findDate(String string) {
// todo
public String findDate(String text) {
if (text == null || text.isBlank()) {
return null;
}
String dateRegex =
"\\b(?:"
+ "\\d{4}[-/](?:0[1-9]|1[0-2])[-/](?:0[1-9]|[12]\\d|3[01])"
+ "|"
+ "(?:0[1-9]|[12]\\d|3[01])/(?:0[1-9]|1[0-2])/\\d{4}"
+ "|"
+ "(?:0[1-9]|1[0-2])/(?:0[1-9]|[12]\\d|3[01])/\\d{4}"
+ ")\\b";
Matcher matcher = Pattern.compile(dateRegex).matcher(text);
if (matcher.find()) {
return matcher.group();
}
return null;
}
/*
given a string, implement the method to detect all valid passwords
then, it should return the count of them
@@ -54,8 +74,60 @@ public class BonusExercises {
- has no white-space in it
*/
public int findValidPasswords(String string) {
// todo
return -1;
int count = 0;
for (int i = 0; i <= string.length() - 8;) {
int bestJ = -1;
for (int j = i + 8; j <= string.length(); j++) {
String tempPassword = string.substring(i,j);
if (tempPassword.contains(" ")){
continue;
}
boolean hasSpecialCharacter = false;
boolean hasDigit = false;
boolean hasLowercase = false;
boolean hasUppercase = false;
String specialChars = "!@#$%^&*";
String digits = "1234567890";
String lowerCases = "abcdefghijklmnopqrstuvwxyz";
String upperCases = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int k = 0; k < tempPassword.length(); k++) {
char currentChar = tempPassword.charAt(k);
if (specialChars.contains(String.valueOf(currentChar))){
hasSpecialCharacter = true;
} else if (upperCases.contains(String.valueOf(currentChar))) {
hasUppercase = true;
} else if (lowerCases.contains(String.valueOf(currentChar))) {
hasLowercase = true;
} else if (digits.contains(String.valueOf(currentChar))) {
hasDigit = true;
}
}
if (hasDigit && hasLowercase && hasUppercase && hasSpecialCharacter){
count++;
i = j;
bestJ = j;
break;
}
}
if (bestJ == -1){
i++;
}
}
return count;
}
/*
@@ -64,9 +136,41 @@ public class BonusExercises {
note: your implementation should be case-insensitive, e.g. Aba -> is palindrome
*/
public boolean isPalindrome(String word) {
if (word.length() == 1){
return false;
}
String lowerWord = word.toLowerCase();
StringBuilder mutableInverse = new StringBuilder(lowerWord.length());
for (int i = lowerWord.length() - 1; i >= 0; i--){
mutableInverse.append(lowerWord.charAt(i));
}
String inverseOfWord = mutableInverse.toString();
return lowerWord.equals(inverseOfWord);
}
public List<String> findPalindromes(String string) {
List<String> list = new ArrayList<>();
// todo
String[] wordsArray = string.split("\\s+");
for (String s : wordsArray){
String finalS = s;
if (finalS.endsWith(",")) {
finalS = finalS.substring(0, finalS.length() - 1);
}
if (finalS.isEmpty()) {
continue;
}
if (isPalindrome(finalS)){
list.add(finalS);
}
}
return list;
}