具有MaskFormatter的格式字符串会引发“无效字符”异常

时间:2020-08-11 11:02:53

标签: java intellij-idea maskformatter

我有一个函数,需要将字符串设置为以下格式:#####-#####-##并用前导零填充。

例如:

1234567将成为00001-2345-67

98765432109将成为98765-4321-09

我正在使用MaskFormatter,从文档中我得到的印象是A代表任何字母或数字,而setPlaceHolderCharacter可以填充字符串。

我从技术上知道它是用于文本字段的,但是希望我可以在后端功能中使用它,如果没有的话,我应该使用其他组件吗?

我在下面有这段代码,但是当它遇到java.text.ParseException: Invalid character: 1时会抛出一个异常mask.valueToString(ndc)

public class NdcFormatter implements MapFunction<Purchase, Purchase> {

    private final String maskFormat = "AAAAA-AAAA-AA";
    private final Character placeholder = '0';


    @Override
    public Purchase map(Purchase purchase) throws ParseException {
        if(purchase != null){

            String ndc = purchase.getNdc();
            MaskFormatter mask = new MaskFormatter(maskFormat);
            mask.setPlaceholderCharacter(placeholder);
            String result = mask.valueToString(ndc);

            purchase.setNdc(result);

        }

        return purchase;
    }
}

1 个答案:

答案 0 :(得分:1)

这是修复java.text.ParseException: Invalid character: ...中的错误 MaskFormatter

的方法

解决方案,该错误是valueToString方法中的问题,您必须添加以下代码行:

mask.setValueContainsLiteralCharacters(false);

但是您会遇到类似的问题:

  • 设置1234567时,它将返回12345-6700-00
  • 要获得00001-2345-67,您必须通过00001234567

因此,您必须先格式化输入值。

这是完整的代码:

public class NdcFormatter implements MapFunction<Purchase, Purchase> {

    private final String maskFormat = "AAAAA-AAAA-AA";
    private final Character placeholder = '0';


    @Override
    public Purchase map(Purchase purchase) throws ParseException {
        if(purchase != null){

            String ndc = purchase.getNdc();
            MaskFormatter mask = new MaskFormatter(maskFormat);
            mask.setPlaceholderCharacter(placeholder);
            mask.setValueContainsLiteralCharacters(false);
            String result = mask.valueToString(ndc);

            purchase.setNdc(result);

        }

        return purchase;
    }
}

在这里自己填充前导零是一个简单的代码示例。

    if(ndc.length() < maskFormat.length()) {
        String pad = "0";
        for(int i = 0; i < maskFormat.length() -ndc.length() - 3; i++ ) {
            pad = pad + "0" ;
        }
        ndc = pad + ndc;
    }
相关问题