91 votes

Extraire des chiffres d'une chaîne de caractères - StringUtils Java

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

Exemple : helloThisIsA1234Sample. Je veux le 1234

Il est évident que la séquence de chiffres n'apparaîtra qu'une seule fois dans la chaîne, mais pas à la même position.

(pour ceux qui le demanderont, j'ai un nom de serveur et j'ai besoin d'en extraire un numéro spécifique).

Je voudrais utiliser la classe StringUtils de Apache commomns.

Gracias.

2voto

sendon1982 Points 610

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

2voto

sendon1982 Points 610

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 d'essai

    @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"));
}

1voto

Azad Points 4969

Essayez cette approche si vous avez des symboles et que vous ne voulez que 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);

0voto

Rishabh Agarwal Points 165

Une solution très simple, si séparés par une virgule ou si non séparés 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);

}

0voto

Dinesh Kesavan Points 9

Extension de la meilleure réponse pour trouver les nombres à virgule flottante

       String str="2.53GHz";
       String decimal_values= str.replaceAll("[^0-9\\.]", "");
       System.out.println(decimal_values);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X