Помощь в очистке данных Code-39 Barcode на Java - PullRequest
0 голосов
/ 16 сентября 2011

У меня есть требование очистить строку для недопустимых данных штрих-кода 39 и заменить каждый недопустимый символ на пробел. В настоящее время единственными допустимыми символами в штрих-коде-39 являются 0-9, AZ, - (тире),. (Точка), $ (знак доллара), / (косая черта), + (знак плюс),% (процент) знак) и пробел.

Я попробовал следующее регулярное выражение, но, похоже, в первой группе символов используется только оператор not.

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

Код, похоже, только интерпретирует: если не от А до Я, то заменить на пробел. Как мне заставить его интерпретировать, если не A-Z и не 0-9, а не тире и не знак доллара, а не косая черта и т. Д., То замените символ пробелом.

Любая помощь будет великолепна.

Ответы [ 2 ]

2 голосов
/ 16 сентября 2011

Попробуйте изменить строку шаблона на [^-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 Pattern ;также это очень полезно.

1 голос
/ 16 сентября 2011

Почему "*" в конце?Я бы подумал, что в этом нет необходимости, и что еще больше запутает вас.

...