Java 使用MaskFormatter抛出的格式字符串;无效字符“;例外

Java 使用MaskFormatter抛出的格式字符串;无效字符“;例外,java,intellij-idea,maskformatter,Java,Intellij Idea,Maskformatter,我有一个函数,其中我需要将字符串设置为以下格式:#####-##-#并用前导零填充 例如: 1234567将变为00001-2345-67 98765432109将变为98765-4321-09 我使用的是,文档给我的印象是,A代表任何字母或数字,setPlaceHolderCharacter将填充字符串 从技术上讲,我知道它是用于文本字段的,但我希望我可以在后端功能中使用它,如果没有,我应该使用其他组件吗 下面有这段代码,但当它点击mask.valueToString(ndc) 公共类NdcF

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

例如:

1234567
将变为
00001-2345-67

98765432109
将变为
98765-4321-09

我使用的是,文档给我的印象是,
A
代表任何字母或数字,
setPlaceHolderCharacter
将填充字符串

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

下面有这段代码,但当它点击
mask.valueToString(ndc)

公共类NdcFormatter实现映射函数{
私有最终字符串maskFormat=“AAAA-AAAA-AA”;
专用最终字符占位符='0';
@凌驾
公共采购地图(采购)引发异常{
如果(购买!=null){
字符串ndc=purchase.getNdc();
MaskFormatter mask=新MaskFormatter(maskFormat);
掩码.设置占位符字符(占位符);
字符串结果=mask.valueToString(ndc);
购买。setNdc(结果);
}
退货;
}
}

以下是如何修复
错误
java.text.ParseException:无效字符:…
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;
    }
}
公共类NdcFormatter实现映射函数{
私有最终字符串maskFormat=“AAAA-AAAA-AA”;
专用最终字符占位符='0';
@凌驾
公共采购地图(采购)引发异常{
如果(购买!=null){
字符串ndc=purchase.getNdc();
MaskFormatter mask=新MaskFormatter(maskFormat);
掩码.设置占位符字符(占位符);
mask.setValueContainessTeralCharacters(false);
字符串结果=mask.valueToString(ndc);
购买。setNdc(结果);
}
退货;
}
}
这里是一个简单的代码示例,您可以自己填充前导零

    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;
    }
if(ndc.length()
谢谢,如果我理解正确,我将需要自己填充前导零?是的,完全正确,但至少您不会再有这样的错误:java.text.ParseException:无效字符:。。。
    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;
    }