web-dev-qa-db-fra.com

Extraire les chiffres d'une chaîne - StringUtils Java

J'ai une chaîne et je veux extraire la (seule) séquence de chiffres de la chaîne. 

Exemple: HelloThisIsA1234Sample .. Je veux le 1234

Il est certain que la séquence de chiffres ne se produira qu'une seule fois dans la chaîne mais pas à la même position.

(pour ceux qui demanderont, j'ai un nom de serveur et ai besoin d'extraire un nombre spécifique dedans)

J'aimerais utiliser la classe StringUtils des commandes Apache. 

Merci!

52
NinaNa

Utilisez ce numéro de codeOnly contiendra la sortie souhaitée. 

   String str="sdfvsdf68fsdfsf8999fsdf09";
   String numberOnly= str.replaceAll("[^0-9]", "");
117
user1999257

J'aime toujours utiliser Guava String utils ou similaire pour les problèmes de ce genre:

String theDigits = CharMatcher.digit().retainFrom("abc12 3def"); // 123
22
Michael Bavin

Juste une ligne:

int value = Integer.parseInt(string.replaceAll("[^0-9]", ""));
13
rnrneverdies

Vous pouvez également utiliser Java.util.Scanner:

new Scanner(str).useDelimiter("[^\\d]+").nextInt()

Vous pouvez utiliser next() au lieu de nextInt() pour obtenir les chiffres sous forme de chaîne.

Vous pouvez vérifier la présence d'un nombre à l'aide de hasNextInt() sur la Scanner.

8
Marimuthu Madasamy

Utilisez une expression régulière telle que [^0-9] pour supprimer tous les chiffres non numériques.

A partir de là, utilisez simplement Integer.parseInt(String);

6
user1181445

essaye ça :

String s = "helloThisIsA1234Sample";
s = s.replaceAll("\\D+","");

Cela signifie: remplacez toutes les occurrences de caractères numériques (0 à 9) par une chaîne vide!

4
Shessuky

J'ai créé une classe de test JUnit (en tant que connaissance/information supplémentaire) pour le même problème. J'espère que vous trouverez cela utile.

   public class StringHelper {
    //Separate words from String which has gigits
        public String drawDigitsFromString(String strValue){
            String str = strValue.trim();
            String digits="";
            for (int i = 0; i < str.length(); i++) {
                char chrs = str.charAt(i);              
                if (Character.isDigit(chrs))
                    digits = digits+chrs;
            }
            return digits;
        }
    }

Et le cas de test JUnit est:

 public class StringHelperTest {
    StringHelper helper;

        @Before
        public void before(){
            helper = new StringHelper();
        }

        @Test
    public void testDrawDigitsFromString(){
        assertEquals("187111", helper.drawDigitsFromString("TCS187TCS111"));
    }
 }
3
PAA

Vous pouvez utiliser l'expression régulière suivante.

string.split(/ /)[0].replace(/[^\d]/g, '')

Vous pouvez utiliser str = str.replaceAll("\\D+","");

2
sendon1982
        String line = "This order was32354 placed for QT ! OK?";
        String regex = "[^\\d]+";

        String[] str = line.split(regex);

        System.out.println(str[1]);
2
Az.MaYo

Essayez cette approche si vous avez des symboles et que vous voulez juste des chiffres:

    String s  = "@##9823l;Azad9927##$)(^738#";
    System.out.println(s=s.replaceAll("[^0-9]", ""));
    StringTokenizer tok = new StringTokenizer(s,"`~!@#$%^&*()-_+=\\.,><?");
    String s1 = "";
    while(tok.hasMoreTokens()){
        s1+= tok.nextToken();
    }
    System.out.println(s1);
1
Azad

Vous pouvez diviser la chaîne et comparer avec chaque caractère

public static String extractNumberFromString(String source) {
    StringBuilder result = new StringBuilder(100);
    for (char ch : source.toCharArray()) {
        if (ch >= '0' && ch <= '9') {
            result.append(ch);
        }
    }

    return result.toString();
}

Code de test

    @Test
    public void test_extractNumberFromString() {
    String numberString = NumberUtil.extractNumberFromString("+61 415 987 636");
    assertThat(numberString, equalTo("61415987636"));

    numberString = NumberUtil.extractNumberFromString("(02)9295-987-636");
    assertThat(numberString, equalTo("029295987636"));

    numberString = NumberUtil.extractNumberFromString("(02)~!@#$%^&*()+_<>?,.:';9295-{}[=]987-636");
    assertThat(numberString, equalTo("029295987636"));
}
1
sendon1982

Une solution très simple, si séparée par une virgule ou si elle n'est pas séparée par une virgule

public static void main(String[] args) {

    String input = "a,1,b,2,c,3,d,4";
    input = input.replaceAll(",", "");

    String alpha ="";
    String num = "";

    char[] c_arr = input.toCharArray();

    for(char c: c_arr) {
        if(Character.isDigit(c)) {
            alpha = alpha + c;
        }
        else {
            num = num+c;
        }
    }

    System.out.println("Alphabet: "+ alpha);
    System.out.println("num: "+ num);

}
0
Rishabh Agarwal