Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo!
bin ganz neu in Java und bin noch kein Profi; ich habe nur Erfahrung mit VB 6 aber dass ist schon eine ewigkeit her!!, deshalb brauche ich ganz dringend eure Hilfe!!
Ich muss ein text aus der Festplatte einlesen und zeilenweise auf der Konsole zeigen, dafür habe ich ein ArrayList genommen.
Den Text einlesen klappt schon und zeigt mir auch die Zeilen, nun muss ich auch aus dieser ArrayList , Anzahl der Wörter, Buchstabe und Zeile anzeigen!!
aber ich habe keine Ahnung wie, nach Vb Methode geht es leider nicht. Also könnt ihr mir bitte helfen??
Java:
import java.io.*;
import java.util.*;
public class TextAnalyse
{
public static void main (String [] args)
{
String line;
ArrayList<String> zeilen = new ArrayList<String>();
{
try
{
BufferedReader br = new BufferedReader (new FileReader("C:/Text.txt");
while((line = br.readLine()) != null)
{
zeilen.add(line);
}
br.close();
}
catch (FileNotFoundException e)
{
System.out.println(e.getMessage());
}
catch (IOException e)
{
System.out.println (e.getMessage());
}
for (int i = 0; i < zeilen; zeilen.size(); i++)
{
System.out.println(zeilen.get(i));
}
}
}
}
wie würdest du es denn in VB programmieren?,
poste dazu Code oder erzähle in Worten wie du vorgehen willst, dann kann man ja die fehlenden Java-Befehle suchen
Hallo!
Vielen Dank! für schnelle Antwort! es hat funktioniert! nun habe ich gesehen, dass das Programm liest jeweils eine Zeile und unter der eingelesen Zeile kommt dann die Ergebnis und soweiter,
aber wie kann man das Ergibnis am ende des eingelesenes Textes anzeigen, ich meine zuerst den Text einlesen und Zeile pro Zeile auf die Konsole zeigen und nach der letzten Zeile dann die Gesamteanzahl von Zeilen, wörtern, Zeichen.
Hallo Anzahlderworte, habe ich schon ich habe eine Methode geschrieben und es sieht so aus :
Java:
public int anzahlWorte()
{
int anzahl = 0;
for (String zeile : ein.zeilen)
{
String[] split = zeile.split("\\s");
for (int i = 0; i < split.length; i++)
{
String string = split[i];
if ( string.length() > 0)
anzahl+=1;
}
}
return anzahl;
}
Mit der Mehtode hat es geklappt , nur mit Anzahl der Zeichen , klappt es nicht und auch nicht wenn ich anzeigen will wie oft ein zeichen oder wort vorkommt.
ausserdem ich habe geschrieben dass ich noch kein Profi in java bin! habe erst vor ca. 3 Monat eangefangen
da brauchst du offensichtlich auch den anderen Code, was mich wieder zu meiner ersten Frage zurückbringt oder von den Antworten danach abschreiben
dort hast du jeweils die Anzahl pro Zeile, wie du das über alle Zahlen addieren kannst hat timbeau (nicht 'Anzahlderworte'?) geschrieben,
jede Zahl des Schleifendurchlaufs irgendwo global draufaddieren
Hallo!
ich wollte es nicht so komplizierter machen, daher hatten ich mien Beispiel nur mit einer Klasse erklärt, aber die Sache ist die:
Ich habe 5 Klasse : Einlesen, Ausgabe, Steuerung, Start und Analyse
- Also in der Klasse "Einlesen" wird ein Text (auswahl der Text wird nach parameter eingegeben " beim Debug Configuration ---> Arguments : -input=Text.txt -parameter=param.properties") aus der Festplatte eingelesen .
- Die Klasse "Ausgabe" gibt die ergebnisse des engelesenes Textes als Report (auch ein 'txt' datei) in speicher der Text auf der Festplatte . Das ist auch ein Parameter.!!
- Klasse "Steuerung"
- Klasse "Start" für die Methoden und Funktionen auf.
- Klasse "Analyse" , diese klasse hat für mich eine sehr wichtige rolle !! , hier sollte der Text analysiert werden!!! das heisst : anzahl der wörter y wie oft ein wort vorkommt. Untersortierung der Wörter nach Länge
anzahl der zeichen y wie oft ein zeichen vorkommt (auch die Sonderzeichen)
Dazu kommt auch ich soll das die Wörter mit einem Parameter sortieren (aufstieg/abstieg)
Und nun!! wer kann mir da Helfen? wer kann dieses Aufagabe lösen???
Ich komme nicht mehr weiter habe schon verschiedene alternative ausprobiert und es funtioniert nicht!!
Ich bitte um Hilfe!!!!!
Hier die Klassecode :
Java:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
/**
* @author KLU
*
*/
public class Start
{
/** dies ist die Start Methode für mytext.de
* Sie liest die Programmparameter ein und initialiaisertt die Abläufe.
* Dazu benutzt Sie die Klassen {@link Ausgabe}, {@link Eingabe} und {@link Analyse}
* @param args liste von Strings als eingabeparameter
*
*/
public static void main(String[] args)
{
System.out.println("Ausgabe:"); // = Edicion!
/*
* Hier werden die PARAMETER EINGELESEN
*/
Steuerung steuerparameter = new Steuerung();
for (String startparameter : args)
{
if (startparameter == null) continue;
// die ausgabedatei
if(startparameter.startsWith("-input=") && startparameter.length() > 7)
{
steuerparameter.eingabeDatei = startparameter.substring(7);
steuerparameter.ausgabeDatei = steuerparameter.eingabeDatei;
}
// if (startparameter.startsWith("-output=")&& startparameter.length() > 8)
// {
// steuerparameter.ausgabeDatei = startparameter.substring(8);
// }
else if (startparameter.startsWith("-parameter=") && startparameter.length() > 11)
{
steuerparameter.parameterDatei = startparameter.substring(11);
}
else
{
Ausgabe.logToConsole("unbekannter Parameter: "+startparameter);
}
}
if (steuerparameter.parameterDatei == null)
{
Ausgabe.logToConsole("-parameterDatei nicht eingegeben");
return;
}
/*Einlesen der Datei
*
*/
FileReader liesFile; // Variable zum Einlesen
try
{
File eingabFile = new File ("U:/MyTextde/Texte/", steuerparameter.eingabeDatei); //Dattei wird hier aufgerufen
liesFile = new FileReader (eingabFile); //liesFile
}
catch (FileNotFoundException e1)
{
Ausgabe.logToConsole("eingabeDatei'" + steuerparameter.eingabeDatei+ "' nicht gefunden : " + e1.getMessage());
return;
}
//Text einlesen
//parameter einlesen
FileReader paramDatei;
try
{
File paramFile = new File ("U:/MyTextde/Konfiguration/", steuerparameter.parameterDatei);
paramDatei = new FileReader (paramFile);
}
catch (FileNotFoundException e)
{
Ausgabe.logToConsole("parameterDatei"+ steuerparameter.parameterDatei + " nicht gefunden :" + e.getMessage());
return;
}
try
{
steuerparameter.parameter = new Properties();
steuerparameter.parameter.load(paramDatei);
}
catch(IOException e)
{
System.out.println(" parameterDatei ' " + steuerparameter.parameterDatei + " ' nicht lesbar: " + e.getMessage());
}
//ausgabe der Parameter
Ausgabe aus = new Ausgabe(steuerparameter);
aus.logging("Ausgabe");
aus.logging(steuerparameter.parameter.toString());
//ausgabe der Parameter
aus.logging(" parameter "+ steuerparameter.toString());
//Eingabe ein= new Eingabe (parameter);
Einlesen einles = new Einlesen(steuerparameter, aus);
aus.logging("Eingelesener Text:\r\n"+einles.getText());
Analyse analyse = new Analyse(einles,steuerparameter,aus);
aus.logging("Wortliste : ");
aus.logging("----------");
aus.logging("\n");
for (String string : analyse.worter)
{
aus.logging(string);
}
aus.logging("\n");
aus.logging("===================================");
aus.logging("Anzahl Wörter: "+analyse.wortZaehlen());
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
/** In dieser Klasse, wird ein Textdatei aufgerunfen
* und eingelesen.
* Der Text wird in eine ArrayList eingelesen
*
*/
public class Einlesen
{
Steuerung st; // Die Klasse "Steuerung" bekommt eine Variable namens 'st'
Ausgabe ausgab; // Klasse Ausgabe
FileReader fileAufrufen = null;
String text = "";
public ArrayList<String> zeilen;
public Einlesen(Steuerung kontrolle, Ausgabe aus)
{
st = kontrolle;
ausgab = aus;
init();
}
public String getText()
{
return text;
}
public void init()
{
File eingabeFile = new File ("U:/MyTextde/Texte", st.eingabeDatei); // ruf die Datei auf
String line;
zeilen = new ArrayList<String>();
try
{
BufferedReader einlesen = new BufferedReader (new FileReader(eingabeFile)); // liest die Datei
//String zeilen = null;
while ((line = einlesen.readLine()) != null) //liest die Zeile ein
{
zeilen.add(line);
//text += zeilen + "\r\n";
}
einlesen.close();
}
catch (IOException e)
{
//ausgab.logging(e.getMessage());
}
}
}
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
/**
* @author KLU
* xxxx
*/
public class Ausgabe // Ausgabe Datei (Report)
{
Steuerung st;
FileWriter schreibText = null;
/** Der Konstruktor initialisiert die Ausgabe.
* Er öffnet die Einabedate und ....
* @param kontrolle
*/
public Ausgabe(Steuerung kontrolle)
{
st = kontrolle;
init();
}
private void init()
{
if (st == null) return;
if (st.parameter == null) return;
Object objekt = st.parameter.get("ausgabe.aufdatei");
boolean ausgabeAufDatei = Boolean.parseBoolean((String)objekt); //Wenn es String ist , weil es ein Text ist
if (ausgabeAufDatei)
{
File outFile = new File ("U:/MyTextde/Report/", st.ausgabeDatei); // Die Reportdatei wird in diesen eingelegt.
try
{
schreibText = new FileWriter(outFile);
}
catch (IOException e)
{
System.out.println("Die Ausgabedatei kann nicht geöffnet werden " + e.getMessage());
}
}
}
public void logging(String text)
{
logToConsole(text);
if ( schreibText == null)
init();
if ( schreibText != null)
try
{
schreibText.write(text+"\r\n");
schreibText.flush();
}
catch (IOException e)
{
System.out.println("In Ausgabedatei kann nicht geschrieben werden"+e.getMessage());
}
}
public static void logToConsole(String text)
{
System.out.println(text);
}
}
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Locale;
public class Analyse
{
Steuerung parameter;
Einlesen ein;
Ausgabe aus;
ArrayList<String> worter = new ArrayList();
public Analyse(Einlesen ein, Steuerung parameter, Ausgabe aus)
{
this.parameter = parameter;
this.ein = ein;
this.aus = aus;
int i;
for (String zeile : ein.zeilen) // aufruf von Array List "zeilen" aus der Klasse einlesen"
{
// dass hier ist eine ganz einfache Methode von Aufzählung der Wörten.
zeile = zeile.replaceAll("\\p{Punct}" , ""); // nehme die SonderZeichen raus .
// zeile aufteilen in Wörter und einfügen in worter
String[] ww = zeile.split("\\s");
for (String string : ww)
{
if (string != null && string.length() > 0)
worter.add(string); // hier werden die einselne wörter gespeichert! in der neue Liste "worter"
}
}
}
public int wortZaehlen() // ruf die ArrayList "Worter"
{
return worter.size();
}
/** die funktion liefert die Anzahle der Wörter des Textes
* @return die Anzahl der Wörter im Text
*/
public int anzahlWorte() //Wörter zählen in einer eingenen Methode
{
int anzahl = 0;
for (String zeile : ein.zeilen)
{
String[] split = zeile.split("\\s");
for (int i = 0; i < split.length; i++)
{
String string = split[i];
if ( string.length() > 0)
anzahl+=1;
}
}
return anzahl;
}
public int anzahlZeichen()
{
int anzahlzz = 0;
return anzahlzz;
}
}
import java.util.Properties;
public class Steuerung
{
String eingabeDatei = null;
String ausgabeDatei = null;
String parameterDatei = null;
Properties parameter = null;
public String toSt()
{
String result = "Steuerung[ausgabeDatei =" + ausgabeDatei + "\n" ;
result += "eingabeDatei =" + eingabeDatei + "\n";
result += "parameterDatei =" + parameterDatei + "] "+" \n";
result += "ausgabeDatei =" + ausgabeDatei + "]" + "\n";
return result;
}
}
die 5 Klassen sind irrelevant, schon beim ersten Code war der BufferedReader im Grunde überflüssig,
du könntest einfach Testdaten anlegen:
Java:
public class Test
{
public static void main(String[] args)
{
ArrayList<String> zeilen = new ArrayList<String>();
zeilen.add("erste");
zeilen.add("noch eine");
for (int i = 0; i < zeilen.size(); i++)
{
String zeile = zeilen.get(i);
// ..
}
}
}
es geht nur um die Analyse der Zeilen, da hat sich noch nichts geändert,
erst musst du eine Zeile untersuchen, dann die Ergebnisse dort z.B. zu außerhalb deklarierten Variablen dazuzählen,
das ist nichts schweres, ein Beispiel wurde quasi schon gepostet
Wo stehen denn die Zeichen? In jeder Zeile! Setz dich doch einfach mal hin und zähle in einer Zeile alle Zeichen. Tipp: ASCII-Nummern bei der Auswertung nutzen.
ich habe nicht vorgegeben, was du zählen sollst, dass es verschiedene Kategorien gibt ist mir durchaus bewußt,
aber bedenke: was du zählst ist doch komplett egal, schau dir diesen Code an
Java:
public class Test {
public static void main(String[] args) {
ArrayList<String> zeilen = new ArrayList<String>();
zeilen.add("erste");
zeilen.add("noch eine");
int gesamtZeilen = 0;
int gesamtZeichen = 0;
int gesamtSmilys = 0;
for (int i = 0; i < zeilen.size(); i++)
{
String zeile = zeilen.get(i);
int zeilenInZeile = 1;
int zeichenInZeile = 12; // besser berechnen
int smilysInZeile = 4; // besser berechnen
gesamtZeichen += zeichenInZeile;
gesamtZeilen += zeilenInZeile;
gesamtSmilys += smilysInZeile;
}
}
}
erkennst du nicht das so einfache wie auch schon gepostete Grundprinzip?
siehe auch mein Posting zwischendurch,
und dass die 5 Klassen für die Betrachtung der Analyse hier irrelevant sind hat doch keine Auswirkung auf dein restliches Leben,
den Code zur Analyse musst du letztlich natürlich in dein Programm an richtiger Stelle integrieren
ganz ruhig atmen, mal 2 Min. warten vor dem nächsten Posting und weniger Ausrufezeichen verwenden
weil du dazu bisher nichts programmiert hast, es stehen dir verschiedene Wege offen, das jetzt zu tun,
z.B. alle Zahlen im Array anzahl aufaddieren, so schwer drauf zu kommen?
z.B. die früher geposteten Codes zu benutzen, etwa Anzahl Zeichen pro Zeile zählen, in einer Variablen über alle Zeilen addieren
- Aufteilung der Funktionalität
- Unbenutze Variablen (oder wird liesFile in Start nur dazu verwendet um zu überprüfen ob die Datei existiert?)
- Public Variablen
- Muster der Param-Datei fehlt.