Сравнение строк с целыми числами в Java - PullRequest
2 голосов
/ 02 марта 2020

У меня есть задание, запрашивающее пользователя ввести SSN, и программа сообщает, действительно ли он действителен. У меня есть работающая база программы, но в этот момент пользователь может вводить цифры и буквы, и я не уверен, как это исправить. Я знаю о parseInt, но я не мог понять, как это работает, так как на входе есть штрихи. Мой профессор также сказал нам, что мы не можем использовать петли, поскольку в этом нет необходимости.

import java.util.Scanner;

public class Exercise04_21 {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    // DDD-DD-DDDD
    System.out.print("Enter a SSN: ");
    String ssn = input.next();


    if (ssn.charAt(3) == '-' && ssn.charAt(6) == '-') {
        if (ssn.length() == 11) {
            System.out.printf("%s is a valid social security number", ssn);
        } else {
            System.out.printf("%s is an invalid social security number", ssn);
        }
    } else {
        System.out.printf("%s is not a valid social security number", ssn);
    }
}

}

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Вы можете попытаться посчитать количество штрихов, чтобы утверждать, что их два. Затем попробуйте проанализировать входные данные SSN с удаленными тире в виде целого числа. Если эта операция разбора не выдает исключение, то ввод действителен.

String ssn = input.next();
int numDashes = ssn.length() - ssn.replace("-", "").length();
boolean canParse = true;

try {
    int ssnInt = Integer.parseInt(ssn.replace("-", ""));
}
catch (NumberFormatException nfe) {
    canParse = false;
}

if (numDashes == 2 && canParse) {
    System.out.printf("%s is a valid social security number", ssn);
}
else {
    System.out.printf("%s is an invalid social security number", ssn);
}

Конечно, вы также можете упростить жизнь, просто используя регулярное выражение:

if (ssn.matches("\\d{3}-\\d{2}-\\d{4}")) {
    // VALID
}

Но , возможно, ваше назначение не позволяет использовать регулярные выражения.

1 голос
/ 02 марта 2020

Вы можете использовать регулярное выражение для чего-то вроде этого. Например:

String regex = "^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$";
Pattern pattern = Pattern.compile(regex);
boolean matches = Pattern.matches(pattern, text);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...