GOOGLE ADS

Samstag, 30. April 2022

Ganzzahlen aus einer Zeichenfolge mit Wörtern in Java abrufen

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 Saites


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

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...