2012-07-02 10 views
5

¿Puede alguien explicarme por qué el siguiente código da esta salida?Número de análisis con el sufijo negativo

1.2 
null 

ejecutando el siguiente código:

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))); 

Esto funciona sin embargo, pero no me gusta la repetición del patrón:

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))); 

es el sufijo no destinada a ser utilizada para Analizando?

+0

Parse no garantiza que consuma toda la cadena. Se detendrá cuando tenga un personaje con el que no sepa qué hacer. –

+0

@PeterLawrey Lo sé, pero pensé que le dije qué hacer cuando establecí el sufijo. ¿Y por qué maneja + pero no -? –

+0

@PeterLawrey También supongo que el segundo código es más lento, ya que necesitaría analizar toda la cadena dos veces. –

Respuesta

2

Como se especifica en el Javadoc:

El sub-patrón negativo es opcional; en su defecto, a continuación, el sub-patrón positivo prefijado con el signo localizada menos ('-' en la mayoría de lugares)

En su exemple, el analizador está esperando "-1.2-", por lo que hay que añadir esta línea:

format.setNegativePrefix(""); 

¡Que tengas un buen día!

+0

. Lo intenté también antes de publicar, no funcionó aunque –

+0

Sí, lo intenté, y aquí funciona (JRE 1.6.0_22) – cporte

Cuestiones relacionadas