2012-07-02 6 views
5

Czy ktoś może mi wyjaśnić, dlaczego poniższy kod podaje dane wyjściowe?Numer parsowania z ujemnym przyrostkiem

1.2 
null 

Running następującego kodu:

String positive = "1.2+"; 
String negative = "1.2-"; 
DecimalFormat format = new DecimalFormat("0.0"); 
format.setPositiveSuffix("+"); 
format.setNegativeSuffix("-"); 
format.setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(Locale.US)); 
System.out.println(format.parse(positive, new ParsePosition(0))); 
System.out.println(format.parse(negative, new ParsePosition(0))); 

Działa to jednak, ale nie podoba mi się powtórzenia wzoru:

String positive = "1.2+"; 
String negative = "1.2-"; 
DecimalFormat format = new DecimalFormat("0.0+;0.0-"); 
format.setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(Locale.US)); 
System.out.println(format.parse(positive, new ParsePosition(0))); 
System.out.println(format.parse(negative, new ParsePosition(0))); 

jest przyrostkiem nie mają być wykorzystywane do rozbiór gramatyczny zdania?

+0

parsowanie nie gwarantuje zużycia całego ciągu znaków. Zatrzyma się, gdy otrzyma postać, z której nie wie, co robić. –

+0

@PeterLawrey Wiem, ale myślałem, że powiedziałem, co zrobić, gdy ustawiam sufiks? I dlaczego obsługuje +, ale nie -? –

+0

@PeterLawrey Zakładam też, że drugi kod jest wolniejszy, ponieważ musiałby sparsować cały ciąg dwa razy? –

Odpowiedz

2

Jak określono w javadoc:

ujemny podciąg wzorca jest opcjonalna; jeśli występuje, to pozytywne podciąg wzorca poprzedzone znakiem minus (zlokalizowane „-” w większości lokalizacji)

W swojej exemple, parser czeka „-1.2-”, więc trzeba dodać linię:

format.setNegativePrefix(""); 

Miłego dnia!

+0

Czy próbowałeś tego kodu? Próbowałem go również przed wysłaniem, nie działało tho –

+0

Tak, próbował, a tu działa (JRE 1.6.0_22) – cporte