Java中字符串与int的比较

Java中字符串与int的比较,java,string,int,Java,String,Int,我有一个任务要求用户输入SSN,程序会告诉我它是否有效。我让程序的基础工作,但在这一点上,用户可以输入数字和字母,我不知道如何修复。我知道parseInt,但我不知道如何使用它,因为输入中有破折号。我的教授还告诉我们不能使用循环,因为没有必要使用循环 import java.util.Scanner; public class Exercise04_21 { public static void main(String[] args) { Scanner input = new Sc

我有一个任务要求用户输入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);
    }
}

}

您可以将正则表达式用于类似的内容。 例如:

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);

您可以尝试计算破折号的数量,以确定有两个破折号。然后,尝试将删除的破折号作为整数解析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
}

但是,也许您的作业不允许使用正则表达式。

用正则表达式代替这些if测试怎么样?允许吗?
Integer.parseInt(ssn.replaceAll(“-”,”)我讨厌。“我们不能使用X,因为老师这么说”意味着你的老师希望你用一套技巧来解决这个问题,而这些技巧a.)我们不知道问题的严重程度,b.)几乎肯定不包括“在现实世界中”用来解决这个问题的一些技巧。这必然会以“使用A”-“不,他们告诉我们不要使用A”-“然后使用B”-”的形式生成内容。。。很抱歉这么说。@JoachimSauer从技术上讲,我们还没有讨论过循环,所以我从这个角度理解,但它仍然让我感到困扰。@jbrulmans他们应该被允许。她只告诉我们不要循环。我认为应该允许使用正则表达式。她只是说没有循环,因为我们还没看过。d{3},d{2}和d{4}的值是我必须表达的还是那些内置在方法中的值?正则表达式在这种情况下非常有用。你可以仔细阅读,将来你会在某个地方遇到这个问题。更多信息: