Stringbuffer auf Zeilenumbruch überprüfen

Castyll

Aktives Mitglied
Hallo,

Ich möchte, dass mein Programm in der Lage ist Zeilenumbrüche zu erkennen und daraufhin einen Counter, der die Zeilenumbrüche im Text zählt, erhöht. Soweit geschrieben, leider erkennt er die Zeilenumbrüche nie und gibt 0 aus. Hier ist meine Version:
Java:
private void count(){

    //AnzahlZeilen
    for(int i=0;i<text.length();i++)
    {

    if(text.charAt(i) == '\n')
    {

     numLines++;


    }
}
}

text ist hierbei eine StringBuffer Variable und numLines eine int-Variable, die die Anzahl der Zeilen hochzählt. Hat jemand einen Lösungsvorschlag?
 

Tarrew

Top Contributor
Habs mal so getestet:
Java:
StringBuffer s = new StringBuffer("Dies ist\n ein Test mit \nZeilenumbruch");
System.out.println(s);
int numLines = 1;
for (int i = 0; i < s.length(); i++) {
    if (s.charAt(i) == '\n') {
        numLines++;
    }
}
System.out.println("Num lines: " + numLines);

Und krieg die Ausgabe "Num lines: 3".
Passt also.

Wie sieht denn dein kompletter Code aus?
 

Castyll

Aktives Mitglied
Habs mal so getestet:
Java:
StringBuffer s = new StringBuffer("Dies ist\n ein Test mit \nZeilenumbruch");
System.out.println(s);
int numLines = 1;
for (int i = 0; i < s.length(); i++) {
    if (s.charAt(i) == '\n') {
        numLines++;
    }
}
System.out.println("Num lines: " + numLines);

Und krieg die Ausgabe "Num lines: 3".
Passt also.

Wie sieht denn dein kompletter Code aus?
Ich habe eine Ahnung was der Fehler ist. Wir müssen eine Textdatei analysieren, die laut Aufgabenstellung gegeben ist aber nicht implizit "\n" vor jedem Zeilenumbruch stehen hat. Es existiert zwar ein Zeilenumbruch aber ohne \n. Wie würde man denn in dem Fall vorgehen?
 

Tarrew

Top Contributor
Zeilenumbruch ohne \n gibts eig. nicht. \n ist ein Zeilenumbruch. bzw unter Windows auch \r\n.

Aber wenn du nur die Anzahl der Zeilen einer Datei rausfinden willst, dann vllt. so:
Java:
int numLines = 0;
try (BufferedReader br = new BufferedReader(new FileReader("textdatei.txt"))) {
    while (br.readLine() != null) {
        numLines++;
    }
} catch (IOException e) {
    e.printStackTrace();
}
System.out.println("Num Lines: " + numLines);

Aber wie gesagt, am besten Mal den vollständigen Quellcode incl. der Textdatei hochladen, dann kann man den Fehler besser finden.
 

Castyll

Aktives Mitglied
Zeilenumbruch ohne \n gibts eig. nicht. \n ist ein Zeilenumbruch. bzw unter Windows auch \r\n.

Aber wenn du nur die Anzahl der Zeilen einer Datei rausfinden willst, dann vllt. so:
Java:
int numLines = 0;
try (BufferedReader br = new BufferedReader(new FileReader("textdatei.txt"))) {
    while (br.readLine() != null) {
        numLines++;
    }
} catch (IOException e) {
    e.printStackTrace();
}
System.out.println("Num Lines: " + numLines);

Aber wie gesagt, am besten Mal den vollständigen Quellcode incl. der Textdatei hochladen, dann kann man den Fehler besser finden.
Hallo Im Anhang nun der vollständige Code + Text. Leider geht das oben vorgeschlagene nicht da wir eine Vorgabe bei der Aufgabe haben.

Java:
public class Text{
    private StringBuffer text;
    private int numLines = 0;        // Anzahl Zeilen
    private int numWords = 0;        // Anzahl Wörter
    private int numLetters = 0;      // Anzahl Buchstaben
    private int numPunctuations = 0; // Anzahl Satzzeichen
    private int numCharacters = 0;   // Anzahl (beliebiger) Zeichen

    public Text(String str){
    this.text = new StringBuffer(str);
    this.count();
    }

    // Bestimmt, ob c ein Kleinbuchstabe ist
    private static boolean isLowerCaseLetterP(char c){
    return ((c >= 'a') && (c <= 'z'));
    }

    // Bestimmt, ob c ein Grossbuchstabe ist
    private static boolean isUpperCaseLetterP(char c){
    return ((c >= 'A') && (c <= 'Z'));
    }

    // Bestimmt, ob c ein Satzzeichen ist
    private static boolean isPunctuationMark(char c){
    char[] satzzeichen = {',','.','!','?',':',';','"','-'};
    boolean istSatzzeichen = false;
    int i=0;
    while ((i<satzzeichen.length) && (!istSatzzeichen)){
        if (satzzeichen[i] == c){
        istSatzzeichen = true;
        }
        i++;
    }
    return istSatzzeichen;
    }

    /* *** Aufgabenteil (a) *** */
    private void count(){

    //AnzahlZeilen
    for(int i=0;i<text.length();i++)
    {

    if(text.charAt(i) == '\n')
    {

     numLines++;
     numWords++;
    numCharacters++;

    }

    if(text.charAt(i) == ' ')
    {

     numWords++;
    numCharacters++;

    }


    if(isLowerCaseLetterP(text.charAt(i)) == true || isUpperCaseLetterP(text.charAt(i)) == true)
    {

    numLetters++;
    numCharacters++;
    }


    if(isPunctuationMark(text.charAt(i)) == true)
    {

    numPunctuations++;
    numCharacters++;

    }



  

    }

    }


    /* *** Aufgabenteil (b) *** */
    // Methode removePunctuationsAndReplaceNewlines

    public StringBuffer removePunctuationsAndReplaceNewlines()
{

    StringBuffer sb = new StringBuffer(this.text.toString());

    for(int i=0; i<sb.length()-1;i++)
    {


    if(isPunctuationMark(sb.charAt(i)) == true)
    {

    sb.deleteCharAt(i);

    }

    if(sb.charAt(i) == '\n')
    {
     sb.setCharAt(i,' ');

    }

    }


    return sb;
}


    /* *** Aufgabenteil (c) *** */
    // Methode filterWords


    public void filterWords()
    {    int from = 0;
    int to = 0;
    StringBuffer temp = removePunctuationsAndReplaceNewlines();
    int[] wordCount = new int[49];
    double avg = 0;
    int arrayCount=0;
  
    for(int i=0; i<temp.length()-1;i++)
    {

    to = temp.toString().indexOf(' ',from);
    int wordLength = to - from;
    wordCount[wordLength]++;
    from = to++;  

    }
  

    for(int i=0; i<wordCount.length;i++)
    {


     avg += i * wordCount[i];

    }
  

    for(int i=0;i<wordCount.length;i++)
    {
        if(wordCount[i]!=0)
        {

        arrayCount++;

        }

    }
    avg = avg/arrayCount;

    System.out.println("Mittlere Wortlaenge: " +avg);

    }

    public String toString(){
    return ("Anzahl Zeilen: " + numLines +
        "\nAnzahl Woerter: " +  numWords +
        "\nAnzahl Buchstaben: " + numLetters +
        "\nAnzahl Satzzeichen: " + numPunctuations +
        "\nAnzahl Zeichen: " +  numCharacters);
    }

    public static void main(String[] args){
    System.out.println("Text 1: ");
    Text text1 = new Text(TextReader.readFile("Text1.txt"));
    System.out.println(text1);
    text1.filterWords();
    System.out.println("\n***************\n");

    System.out.println("Text 2: ");
    Text text2 = new Text(TextReader.readFile("Text2.txt"));
    System.out.println(text2);
     text2.filterWords();
   }
}

Edit: was noch zu erwähnen ist, der Rest der Methode count funktioniert. Es ist nur der Zeilenumbruch, der nicht erkannt wird.
 

Anhänge

  • Text1.txt
    2,1 KB · Aufrufe: 5

mrBrown

Super-Moderator
Mitarbeiter
Wie sieht denn TextReader.readFile aus? Das sieht mehr nach Fehlerhaftem Einlesen aus...
Wie sieht denn das hier System.out.println(text1); ausgegebene aus?
 

Castyll

Aktives Mitglied
Wie sieht denn TextReader.readFile aus? Das sieht mehr nach Fehlerhaftem Einlesen aus...
Wie sieht denn das hier System.out.println(text1); ausgegebene aus?
Java:
import java.io.*;

public class TextReader {
   
    public static StringBuffer getContent(File f){
    StringBuffer sbuf = new StringBuffer();
    try {
        BufferedReader buf = new BufferedReader(new FileReader(f));
        String line;
        while ((line = buf.readLine()) != null){
        // Zeile in StringBuffer übertragen
        sbuf.append(line + '\n');
        }
    }
    catch (IOException ioe){
        System.out.println("Error while reading " + f.getAbsolutePath());
        ioe.printStackTrace();
        System.exit(0);
    }
    return sbuf;
    }

    public static String readFile(String filename){
    StringBuffer sBuf = new StringBuffer();
    File f = new File(filename);
    if (f.exists() && f.canRead()){
        sBuf = getContent(f);
    }
    else {
        System.out.println(filename + " could not be accessed.");
        System.exit(0);
    }
    return sBuf.toString();
    }
}

Die Klasse wurde aber von der Uni vorgegeben und sollte nicht ver#ndert werden.
System.out.println gibt ohne Fehlermeldungen alle anderen Attribute aus. Nur halt numLines wird als 0 angezeigt
 

Meniskusschaden

Top Contributor
Bei mir funktioniert dein Programm. Es erscheint folgende Ausgabe:
Code:
Text 1:
Anzahl Zeilen: 37
Anzahl Woerter: 343
Anzahl Buchstaben: 1796
Anzahl Satzzeichen: 55
Anzahl Zeichen: 2194
Mittlere Wortlaenge: 1.0

***************
 

Castyll

Aktives Mitglied
Bei mir funktioniert dein Programm. Es erscheint folgende Ausgabe:
Code:
Text 1:
Anzahl Zeilen: 37
Anzahl Woerter: 343
Anzahl Buchstaben: 1796
Anzahl Satzzeichen: 55
Anzahl Zeichen: 2194
Mittlere Wortlaenge: 1.0

***************
Genau mit meinem Code?? Das ist die richtige Ausgabe. Ist die Text Datei im selben Verzeichnis oder woanders?
Bei mir geht es nämlich immer noch nicht ganz
 

Meniskusschaden

Top Contributor
Ich habe es nur mit Eclipse getestet, allerdings unter Windows und Linux. Unter Windows habe ich die Datei mittels notepad++ testweise auch mit CR, LF und CRLF gespeichert. Das hat in allen Varianten funktioniert. In welcher Konstellation funktioniert es bei dir denn nicht?
 

Castyll

Aktives Mitglied
Ich habe es nur mit Eclipse getestet, allerdings unter Windows und Linux. Unter Windows habe ich die Datei mittels notepad++ testweise auch mit CR, LF und CRLF gespeichert. Das hat in allen Varianten funktioniert. In welcher Konstellation funktioniert es bei dir denn nicht?
Nun wenn ich die Text.java unter dem Terminal ausführe. Die Text.java wurde unter dem Standard Textbearbeitungstool von Ubuntu geschrieben.
Edit: Die Aufgabe kann jedoch jetzt problemlos abgegeben werden da die Ausgabe unter Eclipse ja richtig ist, oder?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Compiler -> unendliche Schleife (StringBuffer?) Warum? Java Basics - Anfänger-Themen 2
A StringBuffer Java Basics - Anfänger-Themen 1
H Wie wandel ich ein Datum in eine Zeichenkette um mit StringBuffer? Java Basics - Anfänger-Themen 3
S Dateien/LinkedList/StringBuffer - SOrtierung klappt nicht so ganz Java Basics - Anfänger-Themen 2
D Input/Output Stringbuffer Befehle bei Konvertierung in String Java Basics - Anfänger-Themen 19
B Wie wichtig ist Verwendung von StringBuffer in Schleifen? Java Basics - Anfänger-Themen 10
C Elemente im StringBuffer ersetzen Java Basics - Anfänger-Themen 19
F Problem bei Rückgabe von StringBuffer aus Methode Java Basics - Anfänger-Themen 6
M StringBuffer Java Basics - Anfänger-Themen 2
K Alle vorkommen eines Zeichens in StringBuffer Objekt löschen Java Basics - Anfänger-Themen 6
A String wird nur einmal an den StringBuffer angehängt Java Basics - Anfänger-Themen 10
F StringBuffer und String kompatibel ?? Java Basics - Anfänger-Themen 5
M StringBuffer - Methoden Java Basics - Anfänger-Themen 6
H String/StringBuffer nach zeilen aufteilen Java Basics - Anfänger-Themen 2
M Frage zum StringBuffer Java Basics - Anfänger-Themen 7
A Unterschied zwischen String & Stringbuffer! Java Basics - Anfänger-Themen 14
A Zeichen selektiv in einen neuen StringBuffer speichern Java Basics - Anfänger-Themen 2
S StringBuffer(Buchstabe) -> Double konvertieren Java Basics - Anfänger-Themen 6
K StringBuffer Java Basics - Anfänger-Themen 5
S StringBuffer in Datei - Problem mit neuer Zeile Java Basics - Anfänger-Themen 2
Z Was ist ein StringBuffer und wie benutz ich das Ding? Java Basics - Anfänger-Themen 3
L Streamklassen, Filewriter und StringBuffer Java Basics - Anfänger-Themen 2
S StringBuffer anstatt += Java Basics - Anfänger-Themen 8
D String/StringBuffer mit Zeichen einer Sorte füllen Java Basics - Anfänger-Themen 14
B StringBuffer Problem Java Basics - Anfänger-Themen 2
N String oder StringBuffer/StringBuilder Java Basics - Anfänger-Themen 6
D string/stringbuffer Java Basics - Anfänger-Themen 6
G String vs StringBuffer Java Basics - Anfänger-Themen 11
J StringBuffer-Objekt soll auf Char-Array zugreifen. Java Basics - Anfänger-Themen 4
J StringBuffer Java Basics - Anfänger-Themen 4
T Unicode StringBuffer -> String = unleserlich Java Basics - Anfänger-Themen 7
K Wie kann ich daraus einen StringBuffer machen ? Java Basics - Anfänger-Themen 4
R OutputStream direkt in StringBuffer schreiben lassen Java Basics - Anfänger-Themen 2
L String to StringBuffer Java Basics - Anfänger-Themen 3
B StringBuffer Java Basics - Anfänger-Themen 8
B Stringbuffer Java Basics - Anfänger-Themen 4
S PrintWriter mit StringBuffer? Java Basics - Anfänger-Themen 3
G StringBuffer Array null setzen Java Basics - Anfänger-Themen 2
J String in StringBuffer ersetzen Java Basics - Anfänger-Themen 7
S StringBuffer.toString() Java Basics - Anfänger-Themen 3
K Wie lese ich einen StringBuffer ein? Java Basics - Anfänger-Themen 4
JavaBeginner22 TextArea, ohne Zeilenumbruch? Java Basics - Anfänger-Themen 4
JUNSKI Zeilenumbruch JLabel Java Basics - Anfänger-Themen 1
G Benutzereingaben durch Zeilenumbruch trennen und in Array individueller Größe speichern Java Basics - Anfänger-Themen 20
Dawinartor Klassen Zeilenumbruch in JOptionPane.showMessageDialog Java Basics - Anfänger-Themen 8
S \n nicht in Zeilenumbruch umwandeln Java Basics - Anfänger-Themen 5
S Zeilenumbruch mit Scanner erkennen Java Basics - Anfänger-Themen 9
M Zeilenumbruch ab der 10. Zahl Java Basics - Anfänger-Themen 11
F StringBuilder: Zeilenumbruch nach x Zeichen ohne Worttrennung Java Basics - Anfänger-Themen 1
C Zeilenumbruch für langes Strings Java Basics - Anfänger-Themen 2
I Zeilenumbruch im mailto-body Java Basics - Anfänger-Themen 5
D Zeilenumbruch- .txt-Ausgabedatei Java Basics - Anfänger-Themen 10
AssELAss Xml nur nach End-Tag Zeilenumbruch?? Java Basics - Anfänger-Themen 7
A Zeilenumbruch im Code Java Basics - Anfänger-Themen 5
E Zeilenumbruch!? Java Basics - Anfänger-Themen 3
A Zeilenumbruch im Jlabel Java Basics - Anfänger-Themen 11
M ArrayList || Bei Ausgabe nach jedem 10. Eintrag Zeilenumbruch Java Basics - Anfänger-Themen 7
M Zeilenumbruch in JLabel Java Basics - Anfänger-Themen 51
M Zeilenumbruch in JTextarea Java Basics - Anfänger-Themen 4
J Input/Output Datei - Zeilenumbruch einlesen Java Basics - Anfänger-Themen 10
B Zeilenumbruch (zweidim. Matrix) Java Basics - Anfänger-Themen 2
N Denkanstoß Zeilenumbruch Java Basics - Anfänger-Themen 9
M Zeilenumbruch JTextPane Java Basics - Anfänger-Themen 2
C jTable in .txt - versteckter Zeilenumbruch? Java Basics - Anfänger-Themen 6
T Datentypen Zeilenumbruch im String (2-dimensionales array) Java Basics - Anfänger-Themen 4
D Zeilenumbruch für XMl File Java Basics - Anfänger-Themen 3
C Zeilenumbruch verhindern / Clrscr ? Java Basics - Anfänger-Themen 3
T System.out.printf Zeilenumbruch nach x Stellen Java Basics - Anfänger-Themen 4
A Abfrage Zeilenumbruch+.+Zeilenumbruch Java Basics - Anfänger-Themen 17
c_sidi90 jTextarea kein Zeilenumbruch erlauben Java Basics - Anfänger-Themen 4
O TxT Zeilenumbruch Java Basics - Anfänger-Themen 4
E Zeilenumbruch von String schneiden Java Basics - Anfänger-Themen 13
E Zeilenumbruch in JButton mit Variable Java Basics - Anfänger-Themen 2
M Zeilenumbruch nach x Zeichen Java Basics - Anfänger-Themen 8
C textfield zeilenumbruch Java Basics - Anfänger-Themen 2
chik Zeilenumbruch in einem JLabel Java Basics - Anfänger-Themen 6
M "spezieller" Zeilenumbruch beim Kopieren Java Basics - Anfänger-Themen 3
S Zeilenumbruch awt.textarea Java Basics - Anfänger-Themen 16
M BufferedReader.readline() Unix/Windows Zeilenumbruch Java Basics - Anfänger-Themen 4
J Zeilenumbruch in Java Java Basics - Anfänger-Themen 2
J Zeilenumbruch in Java zwischen zwei Strings Java Basics - Anfänger-Themen 6
G Problem mit Zeichen Zeilenumbruch sieht aus wie(Eckige Null) Java Basics - Anfänger-Themen 4
V Zeilenumbruch bei der Eingabe verhindern Java Basics - Anfänger-Themen 6
W Text mit Zeilenumbruch zeichnen? Java Basics - Anfänger-Themen 5
S Weicher Zeilenumbruch? Java Basics - Anfänger-Themen 2
M Konsolenausgabe ohne Zeilenumbruch Java Basics - Anfänger-Themen 3
G Zeilenumbruch in einem String Java Basics - Anfänger-Themen 21
0 Zeilenumbruch funktioniert nicht Java Basics - Anfänger-Themen 4
N automatischer Zeilenumbruch Java Basics - Anfänger-Themen 3
N zeilenumbruch einfügen Java Basics - Anfänger-Themen 3
B Char Feld -> "Zeilenumbruch" Java Basics - Anfänger-Themen 5
M Am Ende eines Strings den Zeilenumbruch entfernen Java Basics - Anfänger-Themen 1
K Zeilenumbruch entfernen aus datei ?!?!? Java Basics - Anfänger-Themen 18
R Zeilenumbruch in einer Datei Java Basics - Anfänger-Themen 8
M sting komplett bearbeiten und nicht nach zeilenumbruch ende Java Basics - Anfänger-Themen 3
G Zeilenumbruch Java Basics - Anfänger-Themen 20
M JLabel - Zeilenumbruch Java Basics - Anfänger-Themen 2
G Automatischer Zeilenumbruch bei einer TextArea Java Basics - Anfänger-Themen 16
G Zeilenumbruch in String variable Java Basics - Anfänger-Themen 4
F Zeilenumbruch Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben