Im Moment habe ich eine Saiteneingabe nach dem Vorbild von "Stern Brenda 90 86 45". Ich versuche, einen Weg zu finden, 90 86 und 45 daraus zu bekommen und sie als Ints den Tests 3, 2 und 1 zuzuweisen, um einen Durchschnitt von ihnen zu berechnen.
while ((line = reader.readLine())!= null) {
test3 = line.indexOf(-2, -1);
test2 = line.indexOf(-5, -4);
test1 = line.indexOf(-8, -7);
Dies gibt für jeden Test einen Wert von -1 zurück (ich habe versucht, einen regulären Ausdruck zu verwenden, um bei Index -2 zu beginnen und zu gehen, bis eine andere Ganzzahl gefunden wird. Der Versuch, eine zweistellige Ganzzahl zu erhalten (im Gegensatz zu dem Versuch, nur zu bekommen etwas wie 5 oder 6) ist wirklich das, was mich abwirft.Ist die Verwendung der.indexOf-Methode der beste Weg, um diese Zahlen aus der Zeichenfolge zu bekommen?Wenn ja, wie verwende ich sie falsch?
Lösung des Problems
Sie könnten einen regulären Ausdruck verwenden, um die Zeichenfolge zu analysieren. Dies berechnet nur den Durchschnitt. Sie können die einzelnen Werte auch nach eigenem Ermessen zuweisen.
String s = "Stern Brenda 90 86 45";
double sum = 0;
\\b
- eine Wortgrenze\\d+
- eine oder mehrere Ziffern()
- eine Capture-Gruppe- passend auf die Saite
s
Matcher m = Pattern.compile("\\b(\\d+)\\b").matcher(s);
int count = 0;
- Solange
find()
true zurückgegeben wird, haben Sie eine Übereinstimmung - Konvertieren Sie also
group(1)
in ein Double, addieren Sie zur Summe und erhöhen Sie die Zählung.
while (m.find()) {
sum+= Double.parseDouble(m.group(1));
count++;
}
Wenn Sie fertig sind, berechnen Sie den Durchschnitt.
System.out.println(sum + " " + count); // just for demo purposes.
if (count > 0) { //just in case
double avg = sum/count;
System.out.println("Avg = " + avg);
}
prints
221.0 3
Avg = 73.66666666666667
Sehen Sie sich die Pattern -Klasse für weitere Details an.
Formatting the final answer may be desirable. See System.out.printf
Keine Kommentare:
Kommentar veröffentlichen