2015-01-01 5 views
0

Here хороший короткий пример для фильтрации строки в десятичной системе:Фильтр струна как десятичное число

String str = "a12.334tyz.78x"; 
str = str.replaceAll("[^\\d.]", ""); 

, что делает 12.334.78

Но как фильтровать этот второй дробной части? У меня есть строка valued 12345.67 doll. (обратите внимание на точку в конце). Так что мне нужно только 12345.67

Извините, что не просто комментировал ответ Óscar López, потому что у него недостаточно репутации.

+0

два числа могут быть извлечены из '12.334.78'. 12.344 и .78 - это то, что вам нужно? – sln

+0

sln, no. Строка может быть любого типа, данный - это только пример. Дело в том, что я должен получить только одну точку. – kolyaseg

ответ

0

Вы можете осуществить Negative Lookahead, чтобы удалить ., который не предшествует цифре.

str = str.replaceAll("[^\\d.]|\\.(?!\\d)", ""); 
Ideone Demo
0

Я смотрел его, но не уверен. Android regex (например, Java) может использовать утверждение
\G, что означает начало в конце последней позиции матча.

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

Это просто на самом деле.

Оба используются при замене всей ситуации.

Первый просто очищает все, что вы не хотите.
Использование вашего примера.

Поиск: "[^\\d.]+"
Заменить: ""

Второй:
Поиск: "(?:(?!\\A)\\G|(\\.))([^.]*)\\."
Заменить: "$1$2"

Последнее регулярное выражение удаляет все точки после первого (но НЕ первый)
Проложить это выражение регулярное выражение:

(?: 
     (?! \A)    # Not at BOS 
     \G     # Start at end of last match position 
    |      # or, 
     (\.)    # (1), One time, The first Dot in the string 
) 
([^.]*)   # (2), Optional any chars 
\.     # Until we find the next extra Dot to remove 

Входной сигнал:

a12.334tyz.78x 

Выход:

12.33478 
Смежные вопросы