J'écris un programme dans lequel l'utilisateur entre une chaîne au format suivant:
"What is the square of 10?"
- Je dois vérifier qu'il y a un nombre dans la chaîne
- puis extraire uniquement le nombre.
- Si j'utilise
.contains("\\d+")
ou.contains("[0-9]+")
, le programme ne trouve pas de nombre dans la chaîne, quelle que soit l'entrée, mais.matches("\\d+")
ne fonctionnera que lorsqu'il n'y a que des nombres.
Que puis-je utiliser comme solution pour rechercher et extraire?
Réponses:
essaye ça
la source
Si vous souhaitez extraire le premier nombre de la chaîne d'entrée, vous pouvez faire-
Exemples:
la source
Je pense que c'est plus rapide que regex.
la source
s=s.replaceAll("[*a-zA-Z]", "")
remplace tous les alphabetss=s.replaceAll("[*0-9]", "")
remplace tous les chiffressi vous faites au-dessus de deux remplacements, vous obtiendrez toute la chaîne de caractères spéciaux
Si vous souhaitez extraire uniquement des entiers d'un
String s=s.replaceAll("[^0-9]", "")
Si vous souhaitez extraire uniquement les alphabets d'un
String s=s.replaceAll("[^a-zA-Z]", "")
Bon codage :)
la source
Je n'ai pas trouvé un seul motif correct. Veuillez suivre le guide ci-dessous pour une solution petite et douce.
la source
Le code ci-dessous suffit pour "Vérifier si une chaîne contient des nombres en Java"
la source
la source
Essayez le modèle suivant:
la source
"please"
cela échouera. De plus, dans l'exemple d'OP, il y a un "?" pour tenir compte de."10"
pour sample.La solution que j'ai choisie ressemble à ceci:
Je suis sûr que ce n'est pas une solution parfaite, mais elle répondait à mes besoins. Merci à tous pour votre aide. :)
la source
Vous pouvez essayer ceci
la source
Comme vous ne voulez pas seulement rechercher un nombre, mais aussi l'extraire, vous devriez écrire une petite fonction le faisant pour vous. Allez lettre par lettre jusqu'à ce que vous repériez 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.
la source
la source
.matches(".*\\d+.*")
ne fonctionne que pour les nombres mais pas pour les autres symboles comme//
ou*
etc.la source
ASCII est au début d'UNICODE, vous pouvez donc faire quelque chose comme ceci:
Je suis sûr que vous pouvez comprendre les autres valeurs ...
la source