2009-10-07 17 views
55

J'ai une longue chaîne. Quelle est l'expression régulière pour diviser les nombres dans le tableau?Comment supprimer le caractère non numérique d'une chaîne dans java?

+0

1. Publier un exemple de chaîne 2. Est-ce une chaîne ou un tableau ou un tableau de chaînes (String [])? 2. Que voulez-vous? supprimez simplement le caractère non numérique d'une chaîne ou supprimez-le et obtenez un tableau contenant les nombres – eveliotc

+2

Veuillez clarifier cette question. Quelques pointeurs: Afficher l'entrée de chaîne et la sortie de chaîne. Reformulez la deuxième phrase pour la rendre un peu plus explicative. Avez-vous plusieurs nombres séparés par un non-chiffre? Ou chaque chiffre devrait être divisé? –

Répondre

137

Retirez-vous ou fractionnez-vous? Cela supprimera tous les caractères non numériques.

myStr = myStr.replaceAll("[^\\d]", "") 
+4

'myStr = myStr.replaceAll (" [\\ D] "," ");' –

+10

Version sans crochets: 'myStr.replaceAll (" \\ D + "," ")', peut-être plus lisible. – Adil

6

Vous voulez utiliser la méthode de la classe String Split() et passer dans une expression régulière de « \ D + » qui correspondra à au moins un non-nombre.

myString.split("\\D+"); 
+0

Cela va supprimer tous les caractères numériques et donner un tableau avec tous les non numériques. C'est exactement le contraire de la demande. – tangens

+1

Oups, je dois avoir mal interprété la question. Dans ce cas, ce serait la version niée de la regex, qui est \\ D + Je vais mettre à jour ma réponse! –

20

Une approche plus pour supprimer tous les caractères non numériques d'une chaîne:

String newString = oldString.replaceAll("[^0-9]", ""); 
+1

Cela fonctionne aussi sous 'gawk'. – Hastur

0

Cela fonctionne dans Flex SDK 4.14.0

myString.replace (/ [^ 0-9 & & ^.]/G, "");

+2

S'il vous plaît ajouter quelques explications à votre code – KhorneHoly

0

vous pouvez utiliser une méthode récursive comme ci-dessous:

public static String getAllNumbersFromString(String input) { 
     if (input == null || input.length() == 0) { 
      return ""; 
     } 
     char c = input.charAt(input.length() - 1); 
     String newinput = input.substring(0, input.length() - 1); 

      if (c >= '0' && c<= '9') { 
      return getAllNumbersFromString(newinput) + c; 

     } else { 
      return getAllNumbersFromString(newinput); 
     } 
    } 
0

façon simple sans utiliser Regex:

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)) { 
      strBuff.append(c); 
     } 
    } 
    return strBuff.toString(); 
} 
6

Une autre solution regex:

string.replace(/\D/g,''); 
+0

Cela a fonctionné pour les chaînes javascript, merci! – jlafay

2

Java 8 collection streams:

StringBuilder sb = new StringBuilder(); 
test.chars().mapToObj(i -> (char) i).filter(Character::isDigit).forEach(sb::append); 
System.out.println(sb.toString()); 
Questions connexes