JavaFX IllegalArgumentException:start必须是< = end

时间:2018-04-05 02:17:51

标签: java exception javafx

我正在尝试在TextField中格式化字符串,其中包括:删除所有不是数字的字符,使用DecimalFormatter格式化数字并限制TextField中的字符数:

private void IntegerInputChecker() {
    ChangeListener<String> integerChecker = new ChangeListener<String>() {
        @Override
        public void changed(ObservableValue<? extends String> observable, String oldValue, 
            String newValue) {
            String pureValue = newValue;
            String formatedText = newValue;
            if (pureValue.length() <= 15) {
                // Limit the characters in TextField
                if (!newValue.matches("\\d*")) {
                    // Replace everything excepts number
                    pureValue = newValue.replaceAll("[^\\d]", "");
                    formatedText = pureValue;
                }
                if (pureValue.length() > 3) {
                    // Format number
                    DecimalFormat formatter = new DecimalFormat( "#,###" );
                    formatedText = formatter.format(Double.parseDouble(pureValue));
                }
                else if(pureValue.length() == 3) {
                    formatedText = pureValue.replaceAll(",", "");
                }
            }
            else {
                // Limit the characters in TextField
                formatedText = formatedText.substring(0, formatedText.length() - 1);
            }
            fieldPrice.setText(formatedText);
        }
    };

    fieldPrice.textProperty().addListener(integerChecker);
}

当我输入数字当我尝试按顺序删除它们时,一切正常,JavaFX会抛出异常(程序仍能正常工作):

java.lang.IllegalArgumentException: The start must be <= the end

例如,当我将数字删除为 123,456 时,如果我有 123,456,789 ,则会抛出上述异常。

提前致谢。

0 个答案:

没有答案