Obtenir des entiers d'une chaîne contenant des mots en Java

En ce moment, j'ai une entrée de chaîne du type "Stern Brenda 90 86 45". J'essaie de trouver un moyen d'en tirer 90 86 et 45 et de les attribuer comme entiers aux tests 3, 2 et 1 respectivement pour en calculer la moyenne.

 while ((line = reader.readLine())!= null) {
test3 = line.indexOf(-2, -1);
test2 = line.indexOf(-5, -4);
test1 = line.indexOf(-8, -7);

Cela renvoie une valeur de -1 pour chaque test (j'ai essayé d'utiliser une expression régulière pour commencer à partir de l'index -2 et aller jusqu'à ce qu'un autre entier soit trouvé. Essayer d'obtenir un entier à deux chiffres (par opposition à si j'essayais juste d'obtenir quelque chose comme 5 ou 6) est vraiment ce qui me décourage.Est-ce que l'utilisation de la méthode.indexOf est la meilleure façon d'extraire ces nombres de la chaîne?Si oui, comment est-ce que je l'utilise de manière incorrecte?


Solution du problème

Vous pouvez utiliser une expression régulière pour analyser la chaîne. Cela calcule juste la moyenne. Vous pouvez également affecter les valeurs individuelles comme vous le jugez approprié.

String s = "Stern Brenda 90 86 45";
double sum = 0;


  • \\b- une limite de mots

  • \\d+- un ou plusieurs chiffres

  • ()- un groupe de capture

  • correspondance sur la chaînes


Matcher m = Pattern.compile("\\b(\\d+)\\b").matcher(s);
int count = 0;


  • tant que find()renvoie vrai, vous avez une correspondance

  • alors convertissez group(1)en un double, ajoutez à la somme et incrémentez le compte.


while (m.find()) {
sum+= Double.parseDouble(m.group(1));
count++;
}

Lorsque vous avez terminé, calculez la moyenne.

System.out.println(sum + " " + count); // just for demo purposes.
if (count > 0) { //just in case
double avg = sum/count;
System.out.println("Avg = " + avg);
}

impressions

221.0 3
Avg = 73.66666666666667

Consultez la classe Pattern pour plus de détails.

La mise en forme de la réponse finale peut être souhaitable. Voir System.out.printf

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"