import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class BonusExercises { /* complete the method below, so it will validate an email address 1. Must have exactly one @ (no more, no less) 2. Split into local-part and domain (before @ and after @) 3. Local-part rules: - Can't be empty - Can't start or end with dot - Can't have two dots in a row 4. Domain rules: - Can't be empty - Can't start or end with hyphen - Can't have underscores - Each segment (between dots) must follow same hyphen rules */ public boolean validateEmail(String email) { String regex = ""; // todo Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(email); return matcher.matches(); } /* This method should find and return the first date in a string. Supported formats: - American: MM/DD/YYYY (e.g., 12/09/2023) - British: DD/MM/YYYY (e.g., 12/09/2023 — same pattern, context matters) - ISO: YYYY-MM-DD (e.g., 2024-07-15) - Slash variant: YYYY/MM/DD (e.g., 2025/01/01) If no match for a date is found in the string, return null. */ public String findDate(String string) { // todo return null; } /* given a string, implement the method to detect all valid passwords then, it should return the count of them a valid password has the following properties: - at least 8 characters - has to include at least one uppercase letter, and at least a lowercase - at least one number and at least a special char "!@#$%^&*" - has no white-space in it */ public int findValidPasswords(String string) { // todo return -1; } /* you should return a list of *words* which are palindromic by word we mean at least 3 letters with no whitespace in it note: your implementation should be case-insensitive, e.g. Aba -> is palindrome */ public List findPalindromes(String string) { List result = new ArrayList<>(); String[] words = string.split("\\s+"); for (int i = 0; i < words.length; i++) { String word = words[i]; word = word.replaceAll("[^a-zA-Z]", ""); if (word.length() < 3) { continue; } String lower = word.toLowerCase(); int left = 0; int right = lower.length() - 1; boolean isPalindrome = true; while (left < right) { if (lower.charAt(left) != lower.charAt(right)) { isPalindrome = false; break; } left++; right--; } if (isPalindrome) { result.add(word); } } return result; } public static void main(String[] args) { // you can test your code here } }