2012-04-29 30 views
149

Provare a rimuovere tutte le lettere e i caratteri che non sono 0-9 e un punto. Sto usando Character.isDigit() ma rimuove anche i decimali, come posso mantenere il decimale?Stringa Java rimuovere tutti i caratteri non numerici

+3

[myStr = myStr.replaceAll ("\ [^ \\ d \]", "")] [1] [1]: http://stackoverflow.com/questions/1533659/ how-do-i-remove-the-non-numeric-character-from-a-string-in-java – Bitmap

+2

Questo è uno strano modo per dirlo. Non è "tutte le lettere e i caratteri che non sono 0-9 e un periodo" equivale a più semplice "tutti i caratteri che non sono 0-9 e un punto"? Voglio dire, le lettere sono caratteri che non sono 0-9 né il periodo. –

risposta

370

provare questo codice:

String str = "a12.334tyz.78x"; 
str = str.replaceAll("[^\\d.]", ""); 

Ora str conterrà "12.334.78".

+8

Questo potrebbe funzionare anche: > str = str.replaceAll ("[\\ D.]", ""); –

+0

@ Óscar López: come includere anche i numeri negativi? Voglio dire, devo sostituire tutto ciò che non è un numero positivo/negativo con uno spazio vuoto. Come farlo? –

+0

@PankajSinghal includono semplicemente il segno meno nella regex: '[^ \\ d .-]' –

68

Vorrei usare una regex.

String text = "-jaskdh2367sd.27askjdfh23"; 
String digits = text.replaceAll("[^0-9.]", ""); 
System.out.println(digits); 

stampe

2367.2723 

Come si potrebbe mantenere - nonché per i numeri negativi.

+0

Non dovresti sfuggire al punto nella tua espressione regolare. –

+0

@AdamZalcman Grazie. Stavo aggiustando. ;) –

+0

Potresti inserire qualche spiegazione su cosa significhi '^' e '.' in questa affermazione? –

19
String phoneNumberstr = "Tel: 00971-557890-999"; 
String numberRefined = phoneNumberstr.replaceAll("[^\\d-]", ""); 

risultato: 0097-557890-999

se anche non è necessario "-" nella stringa che si può fare in questo modo :

String phoneNumberstr = "Tel: 00971-55 7890 999";  
String numberRefined = phoneNumberstr.replaceAll("[^0-9]", ""); 

risultato: 0097557890999

+0

Grazie per l'ottima risposta !! r –

5

modo semplice senza utilizzare Regex:

Aggiunta di un controllo di carattere in più per dot '.' risolverà il requisito:

public static String getOnlyNumerics(String str) { 
    if (str == null) { 
     return null; 
    } 
    StringBuffer strBuff = new StringBuffer(); 
    char c; 
    for (int i = 0; i < str.length() ; i++) { 
     c = str.charAt(i); 
     if (Character.isDigit(c) || c == '.') { 
      strBuff.append(c); 
     } 
    } 
    return strBuff.toString(); 
} 
0

Un modo per sostituirlo con un flusso di Java 8 :

public static void main(String[] args) throws IOException 
{ 
    String test = "ab19198zxncvl1308j10923."; 
    StringBuilder result = new StringBuilder(); 

    test.chars().mapToObj(i-> (char)i).filter(c -> Character.isDigit(c) || c == '.').forEach(c -> result.append(c)); 

    System.out.println(result); //returns 19198.130810923. 
} 
7
str = str.replaceAll("\\D+",""); 
+0

Non so perché la gente ha downvoted la tua soluzione ... Mi ha aiutato molto, grazie! Voti! – Zarial

+0

Grazie a Zarial, vedo che Robert ha effettivamente modificato la mia risposta da str = str.replaceAll ("\ D +", ""); a str = str.replaceAll ("\\ D +", ""); ... Così ho fatto questo errore quando lo ho incollato nel box di editor di StackO. Quindi grazie Robert per il fissaggio. Ora funziona! – Angoranator777

+0

è downvoted perché è un repost. La stessa risposta esatta è già stata inoltrata 5 anni fa !! vedi sopra: https://stackoverflow.com/a/10372905/704246 –

1

Il separatore decimale della valuta può essere diverso da Locale a altro. Potrebbe essere pericoloso considerare sempre come separatore .. cioè

╔════════════════╦═══════════════════╗ 
║ Currency ║  Sample  ║ 
╠════════════════╬═══════════════════╣ 
║ USA   ║ $1,222,333.44 USD ║ 
║ United Kingdom ║ £1.222.333,44 GBP ║ 
║ European  ║ €1.333.333,44 EUR ║ 
╚════════════════╩═══════════════════╝ 

Penso che il modo corretto è:

  • Get carattere decimale tramite DecimalFormatSymbols di default Locale o specificato uno.
  • Cook schema di espressione regolare con carattere decimale in modo da ottenere solo cifre

Ed ecco come sto risolverlo:

import java.text.DecimalFormatSymbols;
import java.util.Locale;

codice:

public static String getDigit(String quote, Locale locale) { 
    char decimalSeparator; 
    if (locale == null) { 
     decimalSeparator = new DecimalFormatSymbols().getDecimalSeparator(); 
    } else { 
     decimalSeparator = new DecimalFormatSymbols(locale).getDecimalSeparator(); 
    } 

    String regex = "[^0-9" + decimalSeparator + "]"; 
    String valueOnlyDigit = quote.replaceAll(regex, ""); 
    try { 
     return valueOnlyDigit; 
    } catch (ArithmeticException | NumberFormatException e) { 
     Log.e(TAG, "Error in getMoneyAsDecimal", e); 
     return null; 
    } 
    return null; 
} 

Spero che possa aiutare, '.

Problemi correlati