CodeGym
Aktion
CodeGym University
Lernen
Kurs
Aufgaben
Umfragen & Quizze
Spiele
Hilfe
Zeitplan für einen Tritt in den Hintern
Community
Benutzer
Forum
Chat
Artikel
Erfolgsstorys
Aktivität
Rezensionen
Abonnements
Helles Design
Frage
  • Rezensionen
  • Über uns
Start
Jetzt lernen
Jetzt lernen
  • Alle Fragen
hidden #10625598
Level 23
  • 25.06.2020
  • 611Aufrufe
  • 5Kommentare

wie zählt man alle Zeichen? wenn nicht so?

Frage zur Aufgabe Leerzeichen
Java Core,  Level 8,  Lektion 11
In der Diskussion


Der erste Parameter der main-Methode ist ein Dateiname.
Zeige das Verhältnis der Anzahl der Leerzeichen zur Anzahl aller Zeichen an. Zum Beispiel 10.45.
1. Zähle alle Zeichen (n1).
2. Zähle die Leerzeichen (n2).
3. Zeige n2/n1*100 an und runde auf 2 Dezimalstellen.
4. Schließe die Streams.

Anforderungen:
  • Du musst nichts von der Konsole lesen.
  • Erstelle einen Stream, der aus der als erster Parameter der main-Methode übergebenen Datei gelesen werden soll.
  • Berechne das Verhältnis der Leerzeichen zu allen Zeichen in der Datei und zeige es an.
  • Der angezeigte Wert muss auf 2 Dezimalstellen gerundet werden.
  • Der zum Lesen der Datei verwendete Stream muss geschlossen werden.
package de.codegym.task.task18.task1817; import java.io.*; /* Leerzeichen */ public class Solution { public static void main(String[] args) throws FileNotFoundException, IOException { File file = new File("c:\\text.irgendwas"); FileInputStream inStream = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(inStream); BufferedReader reader = new BufferedReader(isr); int n1 = 0; int n2 = 0; String line; while((line = reader.readLine()) != null){ String[] signs = line.split("[,.:!?]+"); n1 += signs.length; String[] words = line.split("\\s+"); n2 += words.length; } inStream.close(); float verhältnis = (n2/n1)*100; System.out.println(verhältnis); } }
0
Kommentare (5)
  • Beliebt
  • Neu
  • Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Thomas
Level 32 , Bayreuth, Germany
25 Juni 2020, 10:32
readLine() ist hier nicht die Methode der Wahl. Das heißt aber nicht, dass es nicht funktionieren könnte. Der signs split ist irgendwie falsch. Mit dem Split bzgl. der Leerzeichen machst du den Fehler, dass sie nicht korrekt gezählt werden. Zwei Leerzeichen ergeben ein Array der Länge 3... im Normalfall. Sagen wir, du hast alle Leerzeichen, jetzt müßtest du durch das Array gehen und die Länge jeden Elements nehmen und zum Zeichenzähler hinzufügen. Dann gibt es noch die Eigenart des Readers, der bei readLine() das abschließende Zeilenendezeichen abschneidet. Das müßtest du aber auch zählen. Also noch einen Counter der gelesenen Zeilen. Diesen ganzen Aufriss sparst du dir, wenn du char c = reader.read(); verwendest und durch das gesamte File gehst. Dann nur noch ein
if (c == ' ') leerzeichenCounter++;
else andereZeichenCounter++;
und fertig ist die Aufgabe
0
hidden #10625598
Level 23
25 Juni 2020, 10:53
okay also alle zeichen zählen heisst also ALLE und nicht nur komma etc, gut doch jetzt habe ich diesen: incompatible types: possible lossy conversion from int to char damit bekomme ich: char c = (char)n; char cannot be dereferenced if(c.equals(' ')){ read() liest bytes oder?
0
Thomas
Level 32 , Bayreuth, Germany
25 Juni 2020, 10:58
https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#read() read() gibt ein int zurück... also char c = (char) reader.read... der Rest wie schon oben geschrieben
if (c == ' ') leerzeichenCounter++;
else andereZeichenCounter++;
char ist ein primitve, Vergleiche also mit == und nicht equals
0
hidden #10625598
Level 23
25 Juni 2020, 15:23
also gut, warum scheitert das hier genau? was ist am ersten parameter falsch? String file = "asdfasdfas"; FileInputStream inStream = new FileInputStream(file); BufferedReader reader = new BufferedReader(new InputStreamReader(inStream)); int alle = 0; int leer = 0; char c = (char)reader.read(); if(c == ' ') leer++; else alle++; double value = (leer/alle)*100; value = Math.round(100 * value)/100.0; System.out.println(value); inStream.close(); der parameter ist falsch das verhältnis ist falsch die rundung ist falsch
0
Thomas
Level 32 , Bayreuth, Germany
25 Juni 2020, 15:56
Du liest nur ein Zeichen ein. Evtl. könnte ein Loop angebracht sein? Dann solltest du auch alle Bytes zählen und zudem die Leerzeichen. Bei allen Zeichen ziehst du aber die Leerzeichen ab. Zuletzt solltest du noch ans Runden denken, zwei Stellen nach dem Komma genau.
0
Lernen
  • Registrierung
  • Java-Kurs
  • Hilfe zu Aufgaben
  • Preise
  • Spieleprojekte
  • Java Syntax
Community
  • Benutzer
  • Artikel
  • Forum
  • Chat
  • Erfolgsstorys
  • Aktivität
  • Affiliate Program
Unternehmen
  • Über uns
  • Kontakt
  • Rezensionen
  • Medien
  • CodeGym im Bildungsbereich
  • FAQ
  • Support
CodeGym CodeGym ist ein Java-Tutorial zum Lernen von Java von Grund auf. Dieser Kurs ist perfekt dafür geeignet, Java von Beginn an zu meistern. Er enthält über 1200 Aufgaben mit Sofortüberprüfung und grundlegende Theorie zu den Java-Grundlagen. Damit auch du bei deinem Kurs erfolgreich bist, haben wir eine ganze Reihe motivierender Inhalte: Quizfragen, Programmierprojekte, Inhalte zu effizientem Lernen und zum Berufseinstieg als Java-Entwickler.
Folgen
Sprache der Oberfläche
Programmierer werden gemacht, nicht geboren © 2023 CodeGym
MastercardVisa
Programmierer werden gemacht, nicht geboren © 2023 CodeGym
This website uses cookies to provide you with personalized service. By using this website, you agree to our use of cookies. If you require more details, please read our Terms and Policy.