2015-07-24 14 views
6

Ho una stringa che ha numeri.Come analizzare String contenente il simbolo '+'

Ho un codice come questo,

String tempStr = "+123"; 
    NumberFormat numformat = NumberFormat.getNumberInstance(); 
    numformat.setParseIntegerOnly(true); 
    try { 
     int ageInDays = Integer.parseInt(tempStr); 
     System.out.println("the age in days "+ageInDays); 
    } catch (NumberFormatException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

Si sta lavorando bene per il numero con symbols.But negativo non posso farlo per il numero con il simbolo '+'. Genera NumberFormatException.

Quindi, come posso analizzare un numero con il simbolo '+' da una stringa?

+5

Apparentemente, da Java 7, è possibile eseguire 'Integer.parseInt (" + 123 ");'. Anche il tuo codice sembra funzionare per me, ma sto usando Java 8. Potresti dare un'occhiata a [questo Q & A] (http://stackoverflow.com/questions/2089751/parse-number-with-positive- negativo-prefisso-da-stringa-in-java) per ulteriori dettagli – MadProgrammer

+2

sostituire il segno "+" con uno spazio o tagliarlo. Tecnicamente -123 è un numero ma +123 non è un numero. 123 è il numero positivo. – Srihari

risposta

4

Nel caso si utilizzi Java 7 o versione successiva, si consiglia di utilizzare java.lang.Long; o java.lang.Integer; (se sei sicuro di dover analizzare gli interi).

Funziona in entrambi i casi.

Modifica successiva: Non ho visto che stavi usando Integer.parseInt();

Quindi presumo che tu abbia Java 6 o meno.

In questo caso provare chiamando il seguente metodo prima linea con Integer.parseInt(tempStr); per rimuovere il + in caso esiste:

private static String removePlusSignIfExists(String numberAsString) { 
    if(numberAsString == null || numberAsString.length() == 0){ 
     return numberAsString; 
    } 

    if(numberAsString.charAt(0) == '+'){ 
     return numberAsString.substring(1, numberAsString.length()); 
    } else { 
     return numberAsString; 
    } 
} 
+1

Hai provato in Java 6? Non tutti usiamo l'ultimo e il massimo ... – MadProgrammer

+0

Devo ammettere che l'ho provato in Java 7 e 8. Non ho l'SDK Java 6 per più di un anno – Flowryn

+0

Secondo i documenti, 'Long .parseLong' funzionerà solo a partire dalla versione 7. Quindi in questo caso non aiuta, dal momento che 'Integer.parseInt' funzionerà altrettanto bene iniziando con v.7 – sstan

2

Questa funzione sostituisce fondamentalmente "+" con "", una stringa vuota, quindi "+ 12 + 3" restituirà .

public int parseInt(String text) { 
    return Integer.parseInt(text.replaceAll("+", "")); 
} 

Un esempio di come utilizzare questo è

System.out.println(parseInt("+123")); //Returns 123 

Spero che questo ha aiutato!

Problemi correlati