Вот моя проблема:
Создайте конструктора для номера телефона, учитывая строку в форме xxx-xxx-xxxx или xxx-xxxx для локального числа. Выдайте исключение, если формат не допустим.
Таким образом, я думал для проверки его с помощью регулярного выражения, но я не знаю, делаю ли я его правильно. Также, какое исключение я должен был бы выдать? Я должен создать свое собственное исключение?
public TelephoneNumber(String aString){
if(isPhoneNumberValid(aString)==true){
StringTokenizer tokens = new StringTokenizer("-");
if(tokens.countTokens()==3){
areaCode = Integer.parseInt(tokens.nextToken());
exchangeCode = Integer.parseInt(tokens.nextToken());
number = Integer.parseInt(tokens.nextToken());
}
else if(tokens.countTokens()==2){
exchangeCode = Integer.parseInt(tokens.nextToken());
number = Integer.parseInt(tokens.nextToken());
}
else{
//throw an excemption here
}
}
}
public static boolean isPhoneNumberValid(String phoneNumber){
boolean isValid = false;
//Initialize reg ex for phone number.
String expression = "(\\d{3})(\\[-])(\\d{4})$";
CharSequence inputStr = phoneNumber;
Pattern pattern = Pattern.compile(expression);
Matcher matcher = pattern.matcher(inputStr);
if(matcher.matches()){
isValid = true;
}
return isValid;
}
Привет извините да это - домашняя работа. Для этого присвоения единственный допустимый формат является xxx-xxx-xxxx и xxx-xxxx, все другие форматы (xxx), xxx-xxxx или xxxxxxxxxx недопустимы в этом случае.
Я хотел бы знать, корректно ли мое регулярное выражение
Я думал проверить это с помощью регулярного выражения, но не знаю, правильно ли я это делаю.
Это действительно выглядит чрезмерно сложным. Кроме того, сопоставление xxx-xxx-xxxx
или xxx-xxxx
, где x
- цифра, можно улучшить с помощью "(\\ d {3 } -) {1,2} \\ d {4} "
. Чтобы узнать больше о регулярных выражениях, я рекомендую пройти http://regular-expressions.info .
И какое исключение мне нужно будет создать? Нужно ли мне создавать собственное исключение?
ValidatorException
кажется прямым.
public static void isPhoneNumberValid(String phoneNumber) throws ValidatorException {
if (!phoneNumber.matches(regex)) {
throws ValidatorException("Invalid phone number");
}
}
Если вы по каким-то причинам не хотите создавать его самостоятельно, я бы, вероятно, выбрал IllegalArgumentException
, но все же я этого не рекомендую.
Тем не менее, эта проверка, конечно же, не распространяется на международные и / или внешние телефонные номера. Если это действительно не домашнее задание, я предлагаю переосмыслить валидацию.
Вы можете довольно легко сопоставить эти шаблоны, как предлагает BalusC.
Кстати, StringTokenizer
устарел. Из JavaDoc :
StringTokenizer - это устаревший класс, который сохранен по соображениям совместимости, хотя его использование не рекомендуется в новом коде. Рекомендуется, чтобы любой, кто ищет эту функциональность, использовал вместо этого метод разделения String или пакет java.util.regex.
Более простой способ разбить строку на соответствующие сегменты:
String phoneParts[] = phoneNumber.split("-");