The mentor says "Handle the case where phoneNumber is null.", however as far as I can see that is the first thing that is being tested for? What more do they want?
package com.codegym.task.task22.task2212;
/*
Phone number verification
*/
public class Solution {
public static boolean checkPhoneNumber(String phoneNumber) {
boolean validate = true;
if (phoneNumber.isEmpty()){ // handle case where phoneNumber in null
return false;
}
int length = phoneNumber.replaceAll("[^0-9]","").length(); //check length
if (length != 12 && length != 10){
return false;
}
StringBuilder end = new StringBuilder();
end.append(phoneNumber.charAt(phoneNumber.length()-1));
if(end.toString().matches("\\D")){ //makes sure it ends with a digit
validate = false;
}
int dash = 0;
int open = 0;
int close = 0;
boolean start = false;
int count = -1;
if(validate) {
for (char i : phoneNumber.toCharArray()) {
if (i == '-') {
dash++;
if (dash == 3) { //3 - is too many so stop and return false
return false;
}
} else if (i == '(') {
if (dash == 0) {
open++;
start = true;
} else { //no more than 1 ( allowed so stop and return false
return false;
}
} else if (i == ')') {
if (open == 0 || close == 1) { // no closing before opening
return false;
} else {
close++;
start = false;
}
}
if (start){
count++;
}
}
if (count > 0 && count != 3){
return false;
}
String cleaned = phoneNumber.replaceAll("\\D", ""); //get rid of all the non-digits
//System.out.println(cleaned);
if (length == 12) { // check when 12 numbers are given
validate = cleaned.matches("[0-9]{12}"); //set validate for 12 numbers
}else { // check when 10 num are given
validate = cleaned.matches("[0-9]{10}"); // check for 10 num
}
}
return validate;
}
public static void main(String[] args) {
/*System.out.println("TRUE:");
System.out.println(checkPhoneNumber("+380501234567"));
System.out.println(checkPhoneNumber("+38(050)1234567"));
System.out.println(checkPhoneNumber("+38050123-45-67"));
System.out.println(checkPhoneNumber("050123-4567"));
System.out.println( "FALSE:");
System.out.println(checkPhoneNumber("+38)050(1234567"));
System.out.println(checkPhoneNumber("+38(050)1-23-45-6-7"));
System.out.println(checkPhoneNumber("050xxx4567"));
System.out.println(checkPhoneNumber("050123456"));
System.out.println(checkPhoneNumber("(0)501234567"));
System.out.println(checkPhoneNumber(""));*/
}
}