2014-07-18 4 views
6

Например, я хочу проверить, что мой, когда я разбил свою строку, что первая часть содержит только числа и десятичные точки.Как проверить строку содержит только цифры и десятичные точки?

Я сделал следующий

String[] s1 = {"0.12.13.14-00000001-00000", "0.12.13.14-00000002-00000"}; 

     String[] parts_s1 = s1.split("-"); 
     System.out.println(parts_s1[0]); 
     if(parts_s1[0].matches("[0-9]") 

Но то проверку только для чисел, а не десятичные. Как я могу также проверить на десятичные знаки? Например, я хочу проверить на 0.12.13.14, что он работает, и что-то вроде 0.12.13.14x не будет работать.

ответ

13

Добавить знак точки в регулярном выражении следующим образом:

if(parts_s1[0].matches("[0-9.]*")) {  // match a string containing digits or dots 

* это позволить несколько цифр/десятичных точек.

Если требуется хотя бы одна цифра/десятичная точка, замените * на + для одного или нескольких вхождений.

EDIT:

В случае регулярное выражение должно соответствовать (положительный) десятичных чисел (а не только произвольные последовательности цифр и знаков после запятой), лучший образец будет:

if(parts_s1[0].matches("\\d*\\.?\\d+")) { // match a decimal number 

Примечание что \\d эквивалентно [0-9].

+0

И это также будет содержать пустой ввод. – anubhava

+0

Также это будет соответствовать вводу типа '" .... "' – anubhava

+1

@anubhava Правда, но это не было упомянуто OP. – manouti

6

Вы можете просто добавить точку в список разрешенных символов:

if(parts_s1[0].matches("[.0-9]+") 

Это, однако, будет соответствовать строки, которые состоят исключительно из точек, или последовательности нескольких точек.

7

Вы можете использовать это регулярное выражение:

\\d+(\\.\\d+)* 

Код:

if(parts_s1[0].matches("\\d+(\\.\\d+)*") {...} 
Смежные вопросы