2012-05-21 14 views
9

Integer.parseInt("-1000"); restituisce -1000 come output.Integer.parseint in Java, eccezione quando '+' viene prima

Integer.parseInt("+500"); genera un'eccezione.

Come sarà possibile riconoscere i numeri positivi con il simbolo "+" davanti a loro senza dover tagliare il simbolo?

+1

Qual è il problema con tagliare il simbolo? –

+2

Che non dovresti? –

+0

Perché non usare regex per analizzare il + e lasciare il -? –

risposta

10

Prova DecimalFormat come con il modello "+#;-#". Gestirà l'analisi esplicita firmata.Scomposizione del modello:

  • La prima parte (prima ;) è il pattern positivo, deve iniziare con un + char
  • La seconda parte è il negativo e deve iniziare con un - char

Esempio:

DecimalFormat df = new DecimalFormat("+#;-#"); 
System.out.println(df.parse("+500")); 
System.out.println(df.parse("-500")); 

Uscite:

500 
-500 
+0

Sembra impossibile ottenere un DecimalFormat in grado di analizzare "+1" come 1, "-1" come -1 e "0" come 0. – Ben

7

Una possibilità è quella di utilizzare Java 7 ... partendo dal presupposto che si comporta as documented:

analizza l'argomento stringa come un intero decimale con segno. I caratteri nella stringa devono essere tutti cifre decimali, tranne che il primo carattere può essere un segno meno ASCII '-' ('\ u002D') per indicare un valore negativo o un segno più ASCII + '(' \ u002B ') per indicare un valore positivo.

Sembra che questa fosse una nuova funzionalità introdotta in Java 7. I documenti JDK 6 indicano solo che viene gestito -.

6

Il metodo si comporta come descritto nella documentazione:

I caratteri della stringa devono essere tutti cifre decimali, ad eccezione che il primo carattere può essere un segno ASCII meno '-' ('\ u002D') per indicare un valore negativo.

È necessario saltare il primo carattere, se si tratta di un + per fare l'analizzare correttamente:

if (s.charAt(0) == '+') s = s.substring(1); 
int val= Integer.parseInt(s); 
+2

L'OP dice * "senza dover tagliare il simbolo?" * – aioobe

+1

Sì intendevo senza dover gestire il simbolo "+" esplicitamente. In ogni caso, grazie per aver risposto. Penso che la risposta in formato decimale sia adatta. – Achilles

+1

@Achilles Sì, lo schema 'DecimalFormat' è una buona risposta. – dasblinkenlight

0

public int parseInt statico (String s) getta NumberFormatException

analizza la stringa argomento come numero intero decimale con segno. I caratteri nella stringa devono essere tutti cifre decimali, tranne che il primo carattere potrebbe essere un segno meno ASCII '-' ('\ u002D') per indicare un valore negativo. Il valore intero risultante viene restituito, esattamente come se l'argomento e la radice 10 fossero dati come argomenti al metodo parseInt (java.lang.String, int).

Javadoc

1

Sto usando Java 7, e Integer.parseInt("+500"); non sta gettando alcuna eccezione.

I caratteri della stringa devono essere tutti cifre decimali, ad eccezione che il primo carattere può essere un segno ASCII meno '-' ('\u002D') per indicare un valore negativo o un ASCII segno più '+' ('\u002B') per indicare un valore positivo.

Java 7 documentation for Integer.parseInt(String)

+0

Sto usando java 6! – Achilles

+0

in caso di java 6 viene gestito solo "-". così puoi cambiare il tuo jre o cambiare il tuo codice. –

0

L'implementazione è cambiato da Java 6 a 7. Intger.parseInt ("+ 500") utilizzato per Eccezione fino Java 6, ma funziona perfettamente bene con Java 7

Problemi correlati