J'écris un programme dans lequel l'utilisateur entre une chaîne au format suivant:
"What is the square of 10?"
.contains("\\d+")
ou .contains("[0-9]+")
, le programme ne peut pas trouver un nombre dans la chaîne, quelle que soit l'entrée, mais .matches("\\d+")
ne fonctionnera que s'il n'y a que des nombres.Que puis-je utiliser comme solution pour trouver et extraire?
La solution que j'ai choisie ressemble à ceci:
Pattern numberPat = Pattern.compile("\\d+");
Matcher matcher1 = numberPat.matcher(line);
Pattern stringPat = Pattern.compile("What is the square of", Pattern.CASE_INSENSITIVE);
Matcher matcher2 = stringPat.matcher(line);
if (matcher1.find() && matcher2.find())
{
int number = Integer.parseInt(matcher1.group());
pw.println(number + " squared = " + (number * number));
}
Je suis sûr que ce n'est pas une solution parfaite, mais cela répondait à mes besoins. Merci à tous pour l'aide. :)
essaye ça
str.matches(".*\\d.*");
Si vous voulez extraire le premier nombre de la chaîne d'entrée, vous pouvez faire -
public static String extractNumber(final String str) {
if(str == null || str.isEmpty()) return "";
StringBuilder sb = new StringBuilder();
boolean found = false;
for(char c : str.toCharArray()){
if(Character.isDigit(c)){
sb.append(c);
found = true;
} else if(found){
// If we already found a digit before and this char is not a digit, stop looping
break;
}
}
return sb.toString();
}
Exemples:
Pour l'entrée "123abc", la méthode ci-dessus renvoie 123.
Pour "abc1000def", 1000.
Pour "555abc45", 555.
Pour "abc", retournera une chaîne vide.
Je ne pouvais pas trouver un seul motif correct. Veuillez suivre le guide ci-dessous pour une solution petite et douce.
String regex = "(.)*(\\d)(.)*";
Pattern pattern = Pattern.compile(regex);
String msg = "What is the square of 10?";
boolean containsNumber = pattern.matcher(msg).matches();
s=s.replaceAll("[*a-zA-Z]", "")
remplace tous les alphabets
s=s.replaceAll("[*0-9]", "")
remplace toutes les valeurs numériques
si vous faites plus de deux remplacements, vous obtiendrez tous les caractères spéciaux
Si vous voulez extraire uniquement les entiers d'un String s=s.replaceAll("[^0-9]", "")
Si vous voulez extraire uniquement les alphabets d'un String s=s.replaceAll("[^a-zA-Z]", "")
Bonne codage :)
Je pense que c'est plus rapide que regex.
public final boolean containsDigit(String s) {
boolean containsDigit = false;
if (s != null && !s.isEmpty()) {
for (char c : s.toCharArray()) {
if (containsDigit = Character.isDigit(c)) {
break;
}
}
}
return containsDigit;
}
Le code ci-dessous est suffisant pour "Vérifier si une chaîne contient des nombres en Java"
Pattern p = Pattern.compile("([0-9])");
Matcher m = p.matcher("Here is ur string");
if(m.find()){
System.out.println("Hello "+m.find());
}
Essayez le modèle suivant:
.matches("[a-zA-Z ]*\\d+.*")
Pattern p = Pattern.compile("(([A-Z].*[0-9])");
Matcher m = p.matcher("TEST 123");
boolean b = m.find();
System.out.println(b);
Tu peux essayer ça
String text = "ddd123.0114cc";
String numOnly = text.replaceAll("\\p{Alpha}","");
try {
double numVal = Double.valueOf(numOnly);
System.out.println(text +" contains numbers");
} catch (NumberFormatException e){
System.out.println(text+" not contains numbers");
}
public String hasNums(String str) {
char[] nums = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
char[] toChar = new char[str.length()];
for (int i = 0; i < str.length(); i++) {
toChar[i] = str.charAt(i);
for (int j = 0; j < nums.length; j++) {
if (toChar[i] == nums[j]) { return str; }
}
}
return "None";
}
.matches(".*\\d+.*")
ne fonctionne que pour les nombres mais pas pour les autres symboles tels que //
ou *
etc.
Comme vous voulez non seulement chercher un nombre mais aussi l'extraire, vous devriez écrire une petite fonction qui le fait pour vous. Allez lettre par lettre jusqu'à ce que vous trouviez un chiffre. Ah, je viens de trouver le code nécessaire pour vous sur stackoverflow: trouver un entier dans la chaîne . Regardez la réponse acceptée.
ASCII est au début de UNICODE, vous pouvez donc faire quelque chose comme ceci:
(x >= 97 && x <= 122) || (x >= 65 && x <= 90) // 97 == 'a' and 65 = 'A'
Je suis sûr que vous pouvez comprendre les autres valeurs ...