Разобрать BigDecimal из строки, содержащей число в произвольном формате

Мы читаем данные из ячеек XLS, отформатированных как текст.

Мы надеемся, что ячейка содержит число, вывод будет BigDecimal (из-за произвольной точности).

Проблема в том, что формат ячейки также является произвольным, что означает, что он может содержать такие числа, как:

  • с символами валюты ($1000)
  • начальные и конечные пробелы или пробелы между цифрами (например, 1 000 )
  • символы группировки цифр (например, 1000,0)
  • конечно отрицательные числа
  • 'o' и 'O' как нули (например, 1,ooo.oo)
  • другие я не могу думать о

В основном из-за этого последнего пункта я ищу стандартную библиотеку, которая может делать все это, настраиваемая, хорошо протестированная и т. д.

Сначала я посмотрел на Apache, ничего не нашел, но я мог быть слепым... возможно, это тривиальный ответ для кого-то еще...

ОБНОВЛЕНИЕ: областью вопроса являются финансовые приложения. Вообще-то я жду библиотеку, где домен мог бы быть входным параметром - финансовый, научный и т.д. Может быть, еще конкретнее: финансовый с символами валюты? Со стоковыми символами? С расстояниями и другими единицами измерения? Не могу поверить, что я первый, кто додумался до чего-то подобного...


person egbokul    schedule 24.02.2011    source источник
comment
в идеале вы должны знать столбец, который содержит biginteger   -  person Suraj Chandran    schedule 24.02.2011


Ответы (3)


Я не знаю никакой библиотеки, но вы можете попробовать это:

  • Поместите свой номер на строку. (пример: 1000,000 долларов США)
  • Удалите все вхождения $, пробелов или любых других странных символов, которые вы можете придумать...
  • Замените вхождения o и O.
  • Попробуйте разобрать число =]

Это должно решить 99% записей...

person renanleandrof    schedule 24.02.2011
comment
Да, это то, что я делаю в настоящее время. Это не кажется слишком профессиональным. - person egbokul; 24.02.2011
comment
@Gabor, если ваши данные дерьмовые, ваша логика тоже должна быть дерьмовой :-) - person Sean Patrick Floyd; 24.02.2011
comment
Правильно... Если вы действительно хотите быть профессионалом, сделайте несколько шаблонов для своих данных =] - person renanleandrof; 24.02.2011

Купите кучу фотографий или еще более качественных видео с легальным контентом для взрослых. Создайте веб-сайт с этими ресурсами, но ограничьте доступ капчей, которая будет отображать неразгаданные числовые форматы. Создайте набор декодеров чисел из известных числовых форматов и создайте алгоритм, который будет добавлять новые на основе решенных пользователем капч.

person Boris Pavlović    schedule 24.02.2011
comment
:-) Мне потребовалось несколько минут, чтобы понять этот ответ. Чем лучше фильмы, тем выше скорость декодирования! +1, мне нравится :) - person Andreas Dolk; 24.02.2011
comment
Не могу решить, что дать: +1 / -1 / пометить как оскорбительное - person Sean Patrick Floyd; 24.02.2011
comment
Вот что мы называем стрельбой по воробью пушечным ядром. Я не ищу решение с сильным ИИ... - person egbokul; 24.02.2011
comment
@Gabor Kulcsar Правда? Тогда вопрос должен ограничивать область решения. Невозможно решить неизвестную проблему без использования ИИ. - person Boris Pavlović; 24.02.2011
comment
@Boris: совершенно нормально сказать, что я не могу разобрать это число, если оно действительно ошибочно. Для бухгалтера O равно 0, это то, чему я научился. Таким образом, они ожидают, что Iooo будет проанализировано. Я подозреваю, что есть и другие стандартные ожидания, подобные этому, но, поскольку я не бухгалтер, я не знаю их - поэтому я ищу некоторую собранную мудрость. Я определенно не ищу ИИ. - person egbokul; 24.02.2011
comment
@Gabor Как насчет римских чисел, таких как I, II, III, IV ... или looo? Многие старые дактилографы вместо цифры 1 используют строчную букву «L». Не говоря уже о сумасшедших научных обозначениях или числах с каким-то экзотическим основанием, отличным от 2, 8, 10 или 16... - person Boris Pavlović; 24.02.2011

Я думаю, это то, что я искал:

http://site.icu-project.org/

Очень мощная библиотека, хотя на данный момент не ясно, может ли она только форматировать или все отформатированное тоже можно парсить обратно.

person egbokul    schedule 18.04.2011