0

このメソッドを使用して、javafx の TextField からの入力文字列にパターン ("\D{2}\d{3}\D{2}") を持つこのパターン AB123CD があるかどうかを判断しています(ハンド) スローされた PatternSyntaxException をキャッチします。PatternSyntaxException は String String Integer コンストラクターを使用し、次のような例外を表示するため、これを求めています: error at index int ^ またはそのようなもの 私の問題は、コンストラクターに入れる正しいインデックスを取得する方法がわからないことです、または代わりに他の例外を使用できるかどうか

これはコードの一部です:

try {
        if(!tfTarga.getText().matches("\\D{2}\\d{3}\\D{2}"))
            throw new PatternSyntaxException(tfTarga.getText(), tfTarga.getText(), 0);
        else {
            this.olCCar.add(new CCar(new ContractCars(new Contract(this.comboCont.getValue()), this.tfTarga.getText(), LocalDate.now(), Integer.parseInt(this.tfPrezzo.getText()))));
            this.tfTarga.setText("");
            this.tfPrezzo.setText("");
        }
    } catch (PatternSyntaxException e) {
        alert("Error", "Format Error", e.getLocalizedMessage());
    }
4

2 に答える 2

0

PatternSyntaxExceptionは、RuntimeException正規表現に構文エラーがある場合にスローされる です。クラスの静的メソッドString::matchesを内部的に呼び出すため、メソッドによってスローされるコンパイル時の例外はありません 。ソースコードは次のとおりです。Patternmatches

public static boolean matches(String regex, CharSequence input) {
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        return m.matches();
    }

PatternSyntaxExceptionしたがって、ここで明示的にスローしているため、ここでキャッチしていますPatternSyntaxException

if(!tfTarga.getText().matches("\\D{2}\\d{3}\\D{2}"))
            throw new PatternSyntaxException(tfTarga.getText(), tfTarga.getText(), 0);
于 2018-07-07T15:43:33.970 に答える
0

String.matches正規表現の構文が無効なPatternSyntaxException場合にスローされます。入力が正規表現パターンと一致するかどうかを判断するためには使用されません。

\\D{2}\\d{3}\\D{2}は有効な正規表現であるため、これはcatch (PatternSyntaxException e)決して実行されません。

于 2018-07-07T15:44:29.427 に答える