in meinem nächsten Test brauche ich zwei dimensionale arrays um Text zu speichern,
so in etwa würde ich es mit arrays machen.
Beispiel text
So in etwa stehts in der Textdatei geschrieben, die Erkennung funktioniert auch einwandfrei.
Codeausschnitt falls wem interessiert..
mein problem ist, ich weiss nicht im voraus wieviele Zeilen welcher Charakter sprechen wird,
sondern erst nachdem der Text des Charakters zu ende ausgelesen wird von einer text datei.
Ich hab gesucht, aber kein Befehl gefunden, der mit scaner Objekt zusammen eine Zeile nach oben geht, anstadt nach unten. also Gegenteil von nextLine();
gibt es sowas ? also scaner.pastLine() oder sowas ? denn dann lese ich einfach ein Abschnitt,
zähle die Anzahl der Zeilen, mache Rückwertsschleife miz Zuweisung,
dann vorwärts Schleife um die Zeilenanzahl, und gucke weiter im text nach nächsten Schlüsselwörtern.
so muss ich entweder überdimensionierte arrays für alle Fälle machen, wobei die Hälfte dann undefiniert sein wird (will ich nicht, riecht nach Verschwendung)
oder z.B. mit zweidimensionalen Arraylists arbeiten ?
inzwischen hab ich es geschafft (google sei dank
) die zuzuweisung ohne Fehlermeldung hinzuschreiben, aber so richtig funktioniert es nicht ....
hier grob vereinfachter code.
nur funktioniert es gar nicht wie ich es will.
wenn ich am ende den folgenden code hinschreibe um zu gucken
wie lange welche Liste überhaupt ist.
nun. ich habe dann 5 Globale Dialoge (Richtig)
aber nicht 5 interne listen, sondern nur eine und die selbe.
was ich im grunde auch so hingeschrieben habe...
ich hab also nicht zweidimensionale arrayliste, sondern zwei eindimensionale geschafft ?
wärend ich es hire tippe, kam ich auf folgende idee,
beim gefundenem Schlüsselword wird eine temporaire liste erstellt,
wo solange text hinzugefügt wird, bis leerzeile kommt (schlüsselsymbol für abschnitt ende)
dann deklariere ich eindimensionale array mit länge von der temporairen liste.
mache eine for schleife und weise jedem array Objekt den wert von entsprechender Liste zeile zu.
am ende addiere ich den array zu der arralist....
klingt als ob es gehen würde, aber,
im netz hab ich aber Dialoge und Beispiele zu zweidimensionallen arraslists gefunden, es wäre in meinem fall einfacher, aber gibt den sowas überhaupt wie
ist spät, sry für wall of text.
hier der ganzer code, aber da ihr die Textdatei nicht habt, wird es bei euch ohne einer Anpassung nicht laufen. Text datei inhalt ist weiter oben unter Text Spoiler
so in etwa würde ich es mit arrays machen.
Beispiel text
Ruffytxt
1
Hallo, ich heiße Ruffy und ich bin der König der Piraten !
Ich will mit meiner Crew ins Meer stechen, nur hab ich ein Problem..
Buggy der Clown hat durch ein fieses Zauber mein Gedächniss
über wochentage, Monate und Jahreszeigen gelöscht !
hillft du mir dieses Wissen wieder zu erlernen ?
Buggytxt
1
Ha Ha !
Du wirst es Niemals schaffen !
Ruffytxt
2
und ob ! zusammen mit
werden wir es schaffen !
Buggytxt
2
Wenn du schon so sicher bist,
hast du sicherlich nicht gegen einen
klitzekleinen gemeinen RIESENTEST !
Wenn du verlierst, wirst du mir
die nächsten 5 Jahre dienen !
Ruffytxt
3
einverstanden,
aber wenn ich gewinne,
kriege ich an der Stelle mein Gedächniss wieder
Buggytext
ha ha ! das schaffst du nie !
abgemacht Strohhut !
1
Hallo, ich heiße Ruffy und ich bin der König der Piraten !
Ich will mit meiner Crew ins Meer stechen, nur hab ich ein Problem..
Buggy der Clown hat durch ein fieses Zauber mein Gedächniss
über wochentage, Monate und Jahreszeigen gelöscht !
hillft du mir dieses Wissen wieder zu erlernen ?
Buggytxt
1
Ha Ha !
Du wirst es Niemals schaffen !
Ruffytxt
2
und ob ! zusammen mit
werden wir es schaffen !
Buggytxt
2
Wenn du schon so sicher bist,
hast du sicherlich nicht gegen einen
klitzekleinen gemeinen RIESENTEST !
Wenn du verlierst, wirst du mir
die nächsten 5 Jahre dienen !
Ruffytxt
3
einverstanden,
aber wenn ich gewinne,
kriege ich an der Stelle mein Gedächniss wieder
Buggytext
ha ha ! das schaffst du nie !
abgemacht Strohhut !
So in etwa stehts in der Textdatei geschrieben, die Erkennung funktioniert auch einwandfrei.
Codeausschnitt falls wem interessiert..
Java:
while (sc.hasNextLine()) {
String line = sc.nextLine();
if (line.startsWith("Ruffytxt")) { // die ansprechzeile im text
// wurde gefunden
// System.out.println(line+" gefunden");
int dnr = sc.nextInt();
int zeilenCounter = 0; // wird gezählt wieviele Zeilen bis ""
// kommen.
System.out.println("Ruffy Text nr " + dnr); // ausgabe von der
// Zahl hinter
// "ruffytxt"
sc.nextLine();// line sprung um zum text zu kommen
while (sc.hasNextLine()) { // es wird geguckt ob es überhaupt
// nächste line gibts
String dline = sc.nextLine(); // die nächste line im
// charakter dialog wird
// gelesen
if (dline.equals("")) {
break; // am ende jedes Dialoges ist eine leerzeile,
// dies symbolisiert das ende eines text
// abschnittes.
}
System.out.println(dline); // es ist diese line
zeilenCounter++;
arralistIntern.add(dline);
}
arrayGlobal.add(arralistIntern);
System.out.println("Dialog Ruffy Ende! es hatte "
+ zeilenCounter + " Zeilen");
System.out.println();
// System.out.println(sc.);
}
;
mein problem ist, ich weiss nicht im voraus wieviele Zeilen welcher Charakter sprechen wird,
sondern erst nachdem der Text des Charakters zu ende ausgelesen wird von einer text datei.
Ich hab gesucht, aber kein Befehl gefunden, der mit scaner Objekt zusammen eine Zeile nach oben geht, anstadt nach unten. also Gegenteil von nextLine();
gibt es sowas ? also scaner.pastLine() oder sowas ? denn dann lese ich einfach ein Abschnitt,
zähle die Anzahl der Zeilen, mache Rückwertsschleife miz Zuweisung,
dann vorwärts Schleife um die Zeilenanzahl, und gucke weiter im text nach nächsten Schlüsselwörtern.
so muss ich entweder überdimensionierte arrays für alle Fälle machen, wobei die Hälfte dann undefiniert sein wird (will ich nicht, riecht nach Verschwendung)
oder z.B. mit zweidimensionalen Arraylists arbeiten ?
inzwischen hab ich es geschafft (google sei dank
hier grob vereinfachter code.
Java:
List<String> arralistIntern = new ArrayList<String>();
List<List<String>> arrayGlobal = new ArrayList<List<String>>();
...
...Auslese und Zuweisungsverfahren
...
...arralistIntern.add(dline);//interne Schleife
... }
arrayGlobal.add(arralistIntern);//externe Schleife
wenn ich am ende den folgenden code hinschreibe um zu gucken
wie lange welche Liste überhaupt ist.
Java:
System.out.println("WIDERGABE TEST ! ! ! ");
int globalX = arrayGlobal.size();
System.out.println(globalX);
for (int i = 1; i <= globalX; i++) {
int localx = arralistIntern.size();
for (int b = 1; b <= localx; b++) {
System.out.println("G:" + i + " I:" + b);
}
}
nun. ich habe dann 5 Globale Dialoge (Richtig)
aber nicht 5 interne listen, sondern nur eine und die selbe.
was ich im grunde auch so hingeschrieben habe...
ich hab also nicht zweidimensionale arrayliste, sondern zwei eindimensionale geschafft ?
wärend ich es hire tippe, kam ich auf folgende idee,
beim gefundenem Schlüsselword wird eine temporaire liste erstellt,
wo solange text hinzugefügt wird, bis leerzeile kommt (schlüsselsymbol für abschnitt ende)
dann deklariere ich eindimensionale array mit länge von der temporairen liste.
mache eine for schleife und weise jedem array Objekt den wert von entsprechender Liste zeile zu.
am ende addiere ich den array zu der arralist....
klingt als ob es gehen würde, aber,
im netz hab ich aber Dialoge und Beispiele zu zweidimensionallen arraslists gefunden, es wäre in meinem fall einfacher, aber gibt den sowas überhaupt wie
Java:
String zeile = globaleArraylist<3>.interneArralist<4>
ist spät, sry für wall of text.
hier der ganzer code, aber da ihr die Textdatei nicht habt, wird es bei euch ohne einer Anpassung nicht laufen. Text datei inhalt ist weiter oben unter Text Spoiler
Java:
package de.vilkas;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Textlesen {
public static void main(String[] args) throws FileNotFoundException {
File file = new File(
"C:/java/Workspace/MonateSpiel/src/de/vilkas/txtde.txt");
Scanner sc = new Scanner(file);
List<String> arralistIntern = new ArrayList<String>();
List<List<String>> arrayGlobal = new ArrayList<List<String>>();
while (sc.hasNextLine()) {
String line = sc.nextLine();
if (line.startsWith("Ruffytxt")) { // die ansprechzeile im text
// wurde gefunden
// System.out.println(line+" gefunden");
int dnr = sc.nextInt();
int zeilenCounter = 0; // wird gezählt wieviele Zeilen bis ""
// kommen.
System.out.println("Ruffy Text nr " + dnr); // ausgabe von der
// Zahl hinter
// "ruffytxt"
sc.nextLine();// line sprung um zum text zu kommen
while (sc.hasNextLine()) { // es wird geguckt ob es überhaupt
// nächste line gibts
String dline = sc.nextLine(); // die nächste line im
// charakter dialog wird
// gelesen
if (dline.equals("")) {
break; // am ende jedes Dialoges ist eine leerzeile,
// dies symbolisiert das ende eines text
// abschnittes.
}
System.out.println(dline); // es ist diese line
zeilenCounter++;
arralistIntern.add(dline);
}
arrayGlobal.add(arralistIntern);
System.out.println("Dialog Ruffy Ende! es hatte "
+ zeilenCounter + " Zeilen");
System.out.println();
// System.out.println(sc.);
}
;
if (line.startsWith("Buggytxt")) { // die ansprechzeile im text
// wurde gefunden
// System.out.println(line+" gefunden");
int dnr = sc.nextInt();
System.out.println("Buggy Text nr " + dnr); // ausgabe von der
// Zahl hinter
// "ruffytxt"
sc.nextLine();// line sprung um zum text zu kommen
while (sc.hasNextLine()) { // es wird geguckt ob es überhaupt
// nächste line gibts
String dline = sc.nextLine(); // die nächste line im
// charakter dialog wird
// gelesen
if (dline.equals("")) {
break; // am ende jedes Dialoges ist eine leerzeile,
// dies symbolisiert das ende eines text
// abschnittes.
}
System.out.println(dline); // es ist diese line
arralistIntern.add(dline);
}
arrayGlobal.add(arralistIntern);
System.out.println("");
// System.out.println(sc.);
}
;
}
sc.close();
System.out.println("WIDERGABE TEST ! ! ! ");
int globalX = arrayGlobal.size();
System.out.println(globalX);
for (int i = 1; i <= globalX; i++) {
int localx = arralistIntern.size();
for (int b = 1; b <= localx; b++) {
System.out.println("G:" + i + " I:" + b);
}
}
}
}