1

Javaでは、文字列に特殊文字または文字が含まれていることを確認し、その場合は例外をスローすることはできますか?

このようなものですが、try/catchを使用します

/** Get and Checks if the ssn is valid or not **/
    private String getSSN(){
        String tempSSN;
        tempSSN = scan.nextLine();
        if(tempSSN.matches("^.*[^a-zA-Z ]{9}.*$") == false){
            System.out.print("enter a valid SSN without spaces or dashes.");
            tempSSN= scan.nextLine();
        }
        return tempSSN;
    }
4

2 に答える 2

1

try-catch例外処理なしで実行できる場合、ブロックを使用する明確な理由はありません。ただし、例外をスローする場合は、try-catch ブロックを使用する必要はありません。使用できますthrow

    if(something) {
        throw new SomeAppropriateException("Something is wrong");
    }

catch例外をキャッチし、エラーまたはメッセージをログに記録して実行を継続する場合は、ブロックを使用できます。または、他の意味のある例外をスローしたいときに例外をキャッチします。

于 2013-01-18T05:35:53.893 に答える
0

文字を文字の配列にインポートし、ループを使用して、例外をスローする文字タイプについて各文字をチェックします。

以下のsudoコード:

private String getSSN(){
    String tempSSN = scan.nextLine();

    try {
    char a[] = tempSSN.toCharArray();

    for (int i = 0; i < a.length(); i++) {
        if(a[i] != ^numbers 0 - 9^) {      //sudo code here. I assume you want numbers only.
           throw new exceptionHere("error message");   // use this to aviod using a catch. Rest of code in block will not run if exception is thrown.
    }

    catch (exceptionHere) {      // runs if exception found in try block
        System.out.print("enter a valid SSN without spaces or dashes.");
        tempSSN= scan.nextLine();
    }
    return tempSSN;
}

また、配列の長さが9文字でないifを実行することも検討します。常に9文字のssnをキャプチャしようとしていると思います。

if (a.length != 9) {
   throw ....
}

try/catchなしでこれを行うことができます。また、無効なssnをもう一度入力すると、上記は機能しなくなります。

    private String getSSN(){
    String tempSSN = scan.nextLine();

    char a[] = tempSSN.toCharArray();
    boolean marker;

    for (int i = 0; i < a.length(); i++) {
        if(a[i] != ^numbers 0 - 9^) {      //sudo code here. I assume you want numbers only.
           boolean marker = false;
    }

    while (marker == false) {
        System.out.print("enter a valid SSN without spaces or dashes.");
        tempSSN = scan.nextLine();
        for (int i = 0; i < a.length(); i++) {
              if(a[i] != ^numbers 0 - 9^) {      //sudo code here. I assume you want numbers only.
                  marker = false;
              else 
                  marker = true;
    }
    }
    return tempSSN;
}

オプションで、containsメソッドを何らかの方法で使用できます。

boolean marker = tempSSN.contains(i.toString());  // put this in the for loop and loop so long as i < 10; this will go 0 - 9 and check them all.
于 2013-01-18T06:40:27.210 に答える