帮助在Java中清理Code-39条形码数据



我需要清除一个字符串中的非法条形码-39数据,并将每个非法字符更改为空白。目前条形码-39中唯一有效的字符是0-9、a - z、-(破折号)、。(点)、$(美元符号)、/(正斜杠)、+(加号)、%(百分号)和一个空格。

我尝试了下面的正则表达式,但它似乎只在第一组字符中使用非操作符。

barcode = barcode.toUpperCase().replaceAll("[^A-Z0-9\s\-\.\s\$/\+\%]*"," ");

代码似乎只解释,如果不是A到Z,那么用空格替换。我如何解释它,如果不是a - z,不是0-9,不是破折号,不是美元符号,不是正斜杠,等等,然后用空格替换char。

尝试将模式字符串更改为[^-0-9A-Z.$/+% ];这将匹配不在Code 39规范中的单个字符。此外,如果这是将被执行多次的代码,请避免使用String.replaceAll(),因为您的模式将为每个方法调用编译。相反,可以使用预编译的模式,如下所示:

final static Pattern INVALID_CODE39_CHAR = Pattern.compile("[^-0-9A-Z.$/+% ]");
barcode = INVALID_CODE39_CHAR.matcher(barcode.toUpperCase()).replaceAll(" ");

如果您想用单个替换字符串替换连续的无效字符,请在模式的末尾添加+。原始模式中的*将匹配零个或多个不在字符类别中的字符;实际上,在所有字符之后添加您的替换字符串(空格)。

查看模式JavaDoc以获取更多信息;这也是非常有用的

为什么"*"在结尾?我认为这是不必要的,而且会把事情搞得一团糟。

最新更新