CodeGym
Aktion
Lernen
Kurse
Aufgaben
Umfragen & Quizze
Spiele
Hilfe
Zeitplan
Community
Nutzer
Forum
Chat
Artikel
Erfolgsgeschichten
Aktivität
Bewertungen
Abonnements
Helles Design
Frage
  • Bewertungen
  • Über uns
Start
Jetzt lernen
Jetzt lernen
  • Alle Fragen
CodeGym/Hilfe bei Java-Aufgaben/wie zählt man alle Zeichen? wenn nicht so?
hidden #10625598
Level 23
  • 25.06.20
  • 1017Aufrufe
  • 5Kommentare

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

Frage zur Aufgabe Leerzeichen
Java Core,  Level 8,  Lektion 11
In 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
Sie müssen angemeldet sein um einen Kommentar zu hinterlassen
Thomas
Level 41 , 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 41 , 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 41 , 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 bei Aufgaben
  • Preise
  • Java-Syntax
Community
  • Nutzer
  • Artikel
  • Forum
  • Chat
  • Erfolgsgeschichten
  • Aktivität
  • Partnerprogramm
Unternehmen
  • Über uns
  • Kontakte
  • Bewertungen
  • Presse
  • CodeGym for EDU
  • FAQ
  • Support
CodeGymCodeGym ist ein Online-Kurs zum Erlernen der Java-Programmierung von Grund auf. Dieser Kurs ist eine perfekte Möglichkeit, Java als Anfänger zu meistern. Er enthält über 1200 Aufgaben mit sofortiger Überprüfung und einen wesentlichen Umfang an Java-Grundlagentheorie. Um Ihren Lernerfolg zu unterstützen, haben wir eine Reihe motivierender Funktionen implementiert: Quizze, Programmierprojekte, Inhalte zum effizienten Lernen und Karriereinformationen für Java-Entwickler.
Folgen Sie uns
Interface-Sprache
English
Deutsch
Español हिन्दी Français Português Polski বাংলা 简体中文 मराठी தமிழ் Italiano Bahasa Indonesia 繁體中文 Nederlands 日本語 한국어 Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский Vietnamese
"Programmierer werden gemacht, nicht geboren" © 2026 CodeGym
MastercardVisa
"Programmierer werden gemacht, nicht geboren" © 2026 CodeGym