Вывод на экран индентичен выводу из условия, при этом валидатор настаивает, что нужно проверить все критерии валидности. В чём может быть проблема?
package com.javarush.task.task22.task2212;
/*
Проверка номера телефона
*/
import java.text.ParseException;
public class Solution {
public static boolean checkTelNumber(String telNumber) {
boolean result = false;
if (isNumberNotNull(telNumber) && isContainOnlyNumbersPlusAndBrackets(telNumber) && isEndedWithNumber(telNumber)) {
if (isStartedWithPlus(telNumber) && isContainTwelveNumbers(telNumber)) {
if (isContainBrackets(telNumber)) {
if (isContainOnlyThreeNumbers(telNumber)) {
result = true;
}
} else {
result = true;
}
} else if ((isStartedWithNumber(telNumber) || isStartedWithOpeningBracket(telNumber)) && isContainTenNumbers(telNumber)) {
if (isContainBrackets(telNumber) && isContainOnlyThreeNumbers(telNumber)) {
result = true;
}
}
}
return result;
}
public static void main(String[] args) {
System.out.println(checkTelNumber("+38(050)1234567"));
System.out.println(checkTelNumber("+380501234567"));
System.out.println(checkTelNumber("(050)1234567"));
System.out.println(checkTelNumber("0(501)234567"));
System.out.println(checkTelNumber("+38)050(1234567"));
System.out.println(checkTelNumber("+38(050)123-45-67"));
System.out.println(checkTelNumber("050ххх4567"));
System.out.println(checkTelNumber("0501234567"));
System.out.println(checkTelNumber("(0)501234567"));
}
public static boolean isContainBrackets(String number) {
int countOfStartBracket = 0;
int countOfEndBracket = 0;
char[] chars = number.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '(') {
countOfStartBracket++;
} else if (chars[i] == ')') {
countOfEndBracket++;
}
}
return (countOfStartBracket == 1 && countOfEndBracket == 1);
}
public static boolean isContainOnlyThreeNumbers(String number) {
boolean result = false;
char[] chars = number.toCharArray();
int firstBracketIndex = 0;
int secondBracketIndex = 0;
for (char ch : chars) {
if (ch == '(') {
firstBracketIndex = number.indexOf(ch);
} else if (ch == ')') {
secondBracketIndex = number.lastIndexOf(ch);
}
}
String code;
if (secondBracketIndex > firstBracketIndex) {
code = number.substring(firstBracketIndex + 1, secondBracketIndex);
result = (code.length() == 3);
}
return result;
}
public static boolean isStartedWithPlus(String number) {
String firstSymbol = number.substring(0, 1);
return firstSymbol.equals("+");
}
public static boolean isStartedWithNumber(String number) {
boolean result;
String firstSymbol = number.substring(0, 1);
try {
Integer.parseInt(firstSymbol);
result = true;
} catch (Exception e) {
result = false;
}
return result;
}
public static boolean isStartedWithOpeningBracket(String number) {
String firstSymbol = number.substring(0, 1);
return firstSymbol.equals("(");
}
public static boolean isContainOnlyNumbersPlusAndBrackets(String number) {
String replacedTelNumber = number.replaceAll("[^0-9()+]", "");
return number.equals(replacedTelNumber);
}
public static boolean isContainTwelveNumbers(String number) {
String replacedTelNumber = number.replaceAll("[^0-9]", "");
return replacedTelNumber.length() == 12;
}
public static boolean isContainTenNumbers(String number) {
String replacedTelNumber = number.replaceAll("[^0-9]", "");
return replacedTelNumber.length() == 10;
}
public static boolean isNumberNotNull(String number) {
return number != null;
}
public static boolean isEndedWithNumber(String number) {
boolean result;
String lastSymbol = number.substring(number.length() - 1);
try {
Integer.parseInt(lastSymbol);
result = true;
} catch (Exception e) {
result = false;
}
return result;
}
}