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!
Utilisez ce numéro de codeOnly contiendra la sortie souhaitée.
String str="sdfvsdf68fsdfsf8999fsdf09";
String numberOnly= str.replaceAll("[^0-9]", "");
J'aime toujours utiliser Guava String utils ou similaire pour les problèmes de ce genre:
String theDigits = CharMatcher.digit().retainFrom("abc12 3def"); // 123
Juste une ligne:
int value = Integer.parseInt(string.replaceAll("[^0-9]", ""));
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
.
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);
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!
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"));
}
}
Vous pouvez utiliser l'expression régulière suivante.
string.split(/ /)[0].replace(/[^\d]/g, '')
Vous pouvez utiliser str = str.replaceAll("\\D+","");
String line = "This order was32354 placed for QT ! OK?";
String regex = "[^\\d]+";
String[] str = line.split(regex);
System.out.println(str[1]);
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);
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"));
}
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);
}