2014-07-18 12 views
6

Na przykład chcę sprawdzić, że moje, gdy dzielę ciąg znaków, że pierwsza część zawiera tylko liczby i miejsca dziesiętne.Jak sprawdzić ciąg zawiera tylko cyfry i miejsca dziesiętne?

Zrobiłem następujące

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]") 

ale to sprawdzanie tylko dla liczb i nie przecinku. Jak mogę w tym celu sprawdzić również miejsca dziesiętne? Na przykład chcę sprawdzić na 0.12.13.14, że działa i coś jak 0.12.13.14x nie będzie działać.

Odpowiedz

13

Dodaj znak kropki w regex następująco:

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

* jest umożliwienie wielokrotne cyfry/znaki dziesiętne.

W przypadku, gdy wymagana jest przynajmniej jedna cyfra/kropka dziesiętna, należy zamienić * na + dla jednego lub więcej zdarzeń.

EDIT:

W przypadku regex musi odpowiadać liczbie (pozytywny) dziesiętnych (nie tylko dowolne sekwencje cyfr i miejsc po przecinku), lepszy wzór będzie:

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

Uwaga że \\d jest odpowiednikiem [0-9].

+0

A to dopasuje również puste wejście. – anubhava

+0

Również to dopasuje wejście takie jak "" .... " – anubhava

+1

@anubhava Prawda, ale nie zostało to wspomniane przez OP. – manouti

6

Można po prostu dodać kropkę do listy dozwolonych znaków:

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

To jednak będzie pasować ciągi które składają się wyłącznie z kropek, lub sekwencje wielu kropek.

7

Można użyć tego wyrażenia regularnego:

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

Kod:

if(parts_s1[0].matches("\\d+(\\.\\d+)*") {...} 
Powiązane problemy