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îne
s
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
Enregistrer un commentaire