Kleines Problem mit arrays und indesOf! HILFE! :)

Hi Leute! Ich habe da mal ein ( mehr oder weniger ) schweres Problem!

Ich habe einen Text wie z.B " rot.jpg,0,weiss.jpg,,rot.jpg ...."

Ich will nun aus diesem "text" ( 360 Wörter) mit indexOf in Arrays packen

Ich habe geschreiben:




private static String exporter(String s) {
int indexKomma;
int i=1;
String ausschnitt = "";
indexKomma = s.indexOf(",");
if(indexKomma >= 0) {
ausschnitt = s.substring(0, indexKomma);
return ausschnitt;

}
return "0";
}



Wenn ich das durchlaufen lasse gibt er mir immer nur rot.jpg zurück!
Ich will in:
Array[0] = "rot.jpg"
Array[1] = "0"
Array[2] = "weiss.jpg"
Array[3] = ""
array[4] = "rot.jpg" ( also alles aus dem text )

was muss ich tun ( oder schreiben ) das exporter(s) nicht immer nur rot.jpg wieder gibt?


Ich hoffe ihr versteht meine Frage und Problem :D

thx im Vorraus für eure Hilfe!
 
Hallo!

Code:
import java.util.StringTokenizer;

/*
 * Created on 11.03.2004
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */

/**
 * @author Administrator
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class StringSplitTest {

	public static void main(String[] args) {
		String str = "rot.jpg,0,weiss.jpg,,rot.jpg";
		StringTokenizer st = new StringTokenizer(str,",");
		while(st.hasMoreElements()){
			System.out.println(st.nextElement());
		}
		
	}
}

/*
Ausgabe: 
rot.jpg
0
weiss.jpg
rot.jpg
*/
Gruß tom
 
das hilft ir leider nicht weiter! :D

ich brauche eine methode die mit aus dem string s ( ist eine eingelesene *.txt datei) die filgendes
enthält:

rot.jpg,0,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,rot.jpg,0,mauer.jpg,,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,mauer.jpg,,mauer.jpg,,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,energie.jpg,1,energie.jpg,1,energie.jpg,1,,0,,0,,0,,0,,0,mauer.jpg,,mauer.jpg,,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,mauer.jpg,,mauer.jpg,,,0,,0,,0,robinrechts.jpg,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,mauer.jpg,,mauer.jpg,,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,mauer.jpg,,mauer.jpg,,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,,0,mauer.jpg,,rot.jpg,0,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,mauer.jpg,,rot.jpg,0,


Ich muss immer 2 Kommas finden und in 2 arrays packen!
array[0]="rot.jpg";
array[1]="0";

wenn ich aus dem text die ersten 2 werte in arrays gepackt habe ( aus dem text sind das rot.jpg und dann 0 )
kommen die nächsten 2 dran. Ich muss die beiden Arrays dan wieder überschreiben:
array[0]="mauer.jpg";
array[1]="";

und immer soweiter bis ich es 160 mal gemacht habe ( for schleife die ich schreiben kann)

ich habe bis jetzt das ( ich schaffe es den ersten string zu entnehmen und den zweiten):

private static String exporter(String s) {
int indexKomma;
String ausschnitt = "";
indexKomma = s.indexOf(",");
if(indexKomma >= 0) {
ausschnitt = s.substring(i,indexKomma);
return ausschnitt;
}
return "0";
}

private static String exporter2(String s) {
int indexKomma;
String ausschnitt = "";
indexKomma = s.indexOf(",");
if(indexKomma >= 0) {
i = i + indexKomma;
indexKomma = indexKomma + 2;
ausschnitt = s.substring(i,indexKomma);
i = indexKomma;
return ausschnitt;
}
return "0";
}
 
Hallo!

Versuchs mal hiermit:

Code:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

/*
 * Created on 18.03.2004
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */

/**
 * @author Administrator
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
public class Test {

	public static final char COMMA_TOKEN = ',';

	public static void main(String[] args) {
		new Test().doIt();
	}

	/**
	 * 
	 */
	private void doIt() {
		// TODO Auto-generated method stub

		FileReader fr = null;
		BufferedReader br = null;

		Object[] oArray = null;

		try {
			fr = new FileReader("c:/test.txt");

			if (fr == null)
				throw new RuntimeException("fr was null");
			br = new BufferedReader(fr);
			String line = null;
			while ((line = br.readLine()) != null) {

				oArray = tokenize(line);
			}
			
			br.close();
			fr.close();

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		for (int i = 0; i < oArray.length; i++) {
			System.out.println("oArray[" + i + "] = " + oArray[i]);
		}

	}

	/**
	 * @param line
	 * @param string
	 */
	private Object[] tokenize(String line) {
		// TODO Auto-generated method stub
		ArrayList al = new ArrayList();
		int len = line.length();
		char lastChar = ' ';
		StringBuffer buffer = new StringBuffer();

		for (int pos = 0; pos < len; pos++) {

			char c = line.charAt(pos);

			if (c == lastChar
				&& lastChar == Test.COMMA_TOKEN) { // doppelte Kommas gefunden;
				lastChar = c;
				al.add("");
				continue;
			}

			if (c != Test.COMMA_TOKEN) {
				buffer.append(c);
			}

			if (c == Test.COMMA_TOKEN) {
				al.add(buffer.toString());
				buffer.delete(0, buffer.length());
			}

		}

		return al.toArray();
	}
}

Meine Testdatei:

Code:
rot.jpg,0,mauer.jpg,,rot.jpg,0,rot.jpg,0,mauer.jpg,,

Erzeugt Ausgabe:

Code:
oArray[0] = rot.jpg
oArray[1] = 0
oArray[2] = mauer.jpg
oArray[3] = 
oArray[4] = rot.jpg
oArray[5] = 0
oArray[6] = rot.jpg
oArray[7] = 0
oArray[8] = mauer.jpg
oArray[9] =

Gruß tom
 
Zuletzt bearbeitet:
BOA! HAMMER

Es funktionier zwar auf deine weise aber ich muss es so machen das ich die beien exporter(s) benutze!

Ich hoffe du kannst mir auf diese frage eine lösung geben:

Ich schreibe mal eifahc die ganz class ! ( ich hoffe du nimmst dir zeit dafür , also ich würde es nicht tun :D )

Also unsere aufgabe ist es eine html datei einzulesen ( rot.jpg ist das bild auf einem feld und die zahl danach ist der alt eintag!
wir müssen diese html datei einlesen ( was unser leher schon für uns gemacht hat ) und ihn wieder als neue html abspeichern!

code:


import java.io.*;



public class Utility0 {

private static boolean dateiendeErreicht = false;
private static String verzeichnis = "D:\\INF\\";
// Eingabedatei
private static String eDatei;
private static String eDateiMitPfad = verzeichnis + eDatei;
private static File eingabeDatei;
private static FileReader dateiLeser;
private static BufferedReader eingabe;
// Ausgabedatei
private static String aDatei = "ergebnis.htm";
private static String aDateiMitPfad = verzeichnis + aDatei;
private static File ausgabeDatei;
private static FileWriter dateiSchreiber;
private static PrintWriter ausgabe;
// Variable für das Lesen und Schreiben
private static String stringS = "";
private static String zeile = "";


public static void main (String[] args) {
// Öffnen der Ausgabedatei
try {
ausgabeDatei = new File (aDateiMitPfad);
dateiSchreiber = new FileWriter (ausgabeDatei);
ausgabe = new PrintWriter (dateiSchreiber);
// Eingabedatei 1 komplett ausgeben
eDatei = "anfang.txt";
eDateiMitPfad = verzeichnis + eDatei;
eingabeDatei = new File (eDateiMitPfad);
kompletteDateiAusgeben (ausgabe, eingabeDatei);
// Öffnen der Eingabedatei 2 zum Lesen und Verarbeiten
dateiendeErreicht = false;
eDatei = "robinwelt.txt";
eDateiMitPfad = verzeichnis + eDatei;
try {
eingabeDatei = new File (eDateiMitPfad);
dateiLeser = new FileReader (eingabeDatei);
eingabe = new BufferedReader (dateiLeser);
// Zeilen lesen und verarbeiten. Falls es mehrere Zeilen wären, ginge es so:
// while (!dateiendeErreicht) {
// stringS = textzeileLesen (eingabe);
// if (dateiendeGelesen(stringS)) {
// dateiendeErreicht = true;
// }
// else {
// // Die Zeile verarbeiten
// stringSVerarbeiten (ausgabe, stringS);
// }
// }
// Bei eurer Aufgabe muss nur eine Zeile gelesen und verarbeitet werden:
stringS = textzeileLesen (eingabe);
try {
stringSVerarbeiten (ausgabe, stringS);
}
catch (ArrayIndexOutOfBoundsException e) {
System.out.println ("Fehler - Versuch, mit ungültigem Index auf ein Array zuzugreifen");
}
catch (Exception e) {
System.out.println ("Laufzeitfehler in der Verarbeitung");
}
dateiendeErreicht = true;
// Dateiende erreicht, Eingabe schließen
try {
eingabe.close();
}
catch (Exception e) {
System.out.println ("Fehler beim Schließen der Eingabedatei " + eingabeDatei.toString());
}
}
catch (Exception e) {
System.out.println ("Fehler beim Öffnen der Eingabedatei " + eingabeDatei.toString());
}
// Eingabedatei 3 komplett ausgeben
eDatei = "ende.txt";
eDateiMitPfad = verzeichnis + eDatei;
eingabeDatei = new File (eDateiMitPfad);
kompletteDateiAusgeben (ausgabe, eingabeDatei);
// Ausgabe schließen
try {
ausgabe.close();
System.out.println ("Datei " + aDateiMitPfad + " erfolgreich erstellt");
}
catch (Exception e) {
System.out.println ("Fehler beim Schließen der Ausgabedatei");
}
}
catch (Exception e) {
System.out.println ("Fehler beim Öffnen der Ausgabedatei");
}
}

private static String textzeileLesen (BufferedReader r) {
String s = "";
try {
s = r.readLine();
}
catch (Exception e) {
System.out.println ("Lesefehler!");
}
return s;
}

private static boolean dateiendeGelesen (String s) {
if (s == null) {
return true;
}
else {
return false;
}
}


private static void textzeileAusgeben (PrintWriter ausgabe, String s) {
try {
ausgabe.println (s);
}
catch (Exception e) {
System.out.println ("Schreibfehler!");
}
}


private static void kompletteDateiAusgeben (PrintWriter ausgabe, File eingabeDatei) {
dateiendeErreicht = false;
try {
dateiLeser = new FileReader (eingabeDatei);
eingabe = new BufferedReader (dateiLeser);
// Zeilen lesen und ausgeben
while (!dateiendeErreicht) {
zeile = textzeileLesen (eingabe);
// Die Zeile ausgeben
if (dateiendeGelesen(zeile)) {
dateiendeErreicht = true;
}
else {
textzeileAusgeben (ausgabe, zeile);
}
}
// Dateiende erreicht, Eingabe schließen
try {
eingabe.close();
}
catch (Exception e) {
System.out.println ("Fehler beim Schließen der Eingabedatei " + eingabeDatei.toString());
}
}
catch (Exception e) {
System.out.println ("Fehler beim Öffnen der Eingabedatei " + eingabeDatei.toString());
}
}



private static String sKopie;

private static void stringSVerarbeiten (PrintWriter ausgabe, String s)

/*
// Dieses Unterprogramm hat die Aufgabe, den String-Parameter s
// in die oben beschriebene Ausgabe umzuwandeln.
// Der String s enthält die gesamte Robinwelt.
// Es müssen also insgesamt 8 * 24 = 192 Zeilen ausgegeben werden!
// Die Robinwelt hat 8 * 20 = 160 Kästchen. Der String s enthält
// 2 * 160 = 320 Angaben (je Kästchen zwei): 1. für die anzuzeigenden
// Symbole, wobei eine fehlende Angabe "weiss.jpg" bedeutet,
// und 2. für die bei "alt" auszugebende Zahl, wobei eine
// fehlende Angabe "0" bedeutet. Beispiel: rot,2,mauer,,mauer,, (Das waren
// die ersten 3 Kästchen). Der String s ist zu lesen wie ein Buch:
// Zeile für Zeile von links nach rechts. Auch die letzte Angabe endet
// mit einem Komma. Folglich ist das letzte Zeichen des String s ein Komma.
//
// Es ist sinnvoll, erst einmal eine Lösungsidee zu entwerfen.
// Der Einsatz von Arrays ist nützlich.
// Eure Lösungsidee beschreibt idealerweise weitere, von euch entworfene
// Unterprogramme und eine kurze Beschreibung ihrer Verwendung.
// Außerdem wäre es gut, den Beginn eines neuen inhaltlichen Abschnitts
// in diesem Unterprogramm hier (das für euch den Einstiegspunkt darstellt)
// und in jedem von euch neu entworfenen Unterprogramm durch Kommentare
// kennlich zu machen.
// Die Ausgabe einer Zeile in die Datei ergebnis.htm erreicht ihr durch
// folgenden Unterprogrammaufruf:
// textzeileAusgeben (ausgabe, auszugebenderString);
// Dabei ist ausgabe eine Instanz der Klasse PrintWriter, die euch bereits
// fertig zur Verfügung steht (siehe Parameterliste) - ihr könnt sie einfach
// benutzen, sie gibt in die Datei ergebnis.htm aus.
// auszugebenderString steht für irgendeine Instanz vom Typ String, die ihr
// euch selbst erzeugen müsst.
//
// Und nun könnt ihr mit der Verarbeitung beginnen:
*/


{




// Wir wollen einen String ( wert ) 2x mit dem Text aus der "Robinwelt.txt" füllen! Dabei soll das erste String[0] Das Feld sein und der zweite[1]
// soll den Alt eintrag beinhalten. Danach soll er es in HTML wieder geben und beim nächsten Aufruf wieder überschreiben.
// Er soll dies solange machen wie die for schleife unter 160 bleibet.
String tut = s;
int w=0;
int e=1;
int t=0;
String a = exporter(s);
String b = exporter2(s);
String[] wert = new String [2];
wert[0] = a;
wert[1] = b;
String tanga ="<tr align=\"center\" valign=\"middle\"><td height=\"10px\" width=\"12px\" style=\"font-weight: bold; color:'#DDAA00'\">" + e + "</td>";
String tanga2="<td height=\"10px\" width=\"12px\" style=\"font-weight: bold; color:'#DDAA00'\">" + e + "</td></tr>";

for(w=0;w<=159;w++){

// Ok man , das wird jetzt etwas schwer zu erklären :)! Der ganze scheiss der unten zu lesen ist bewirkt nur das am anfang und ende einer zeile eine 1,2,34... steht
if(t==0){
textzeileAusgeben(ausgabe,tanga);
}
if(t==20){
textzeileAusgeben(ausgabe,tanga2);
e++;
}
if(t==20){
textzeileAusgeben(ausgabe,tanga);
}
if(t==40){
textzeileAusgeben(ausgabe,tanga2);
e++;
}
if(t==40){
textzeileAusgeben(ausgabe,tanga);
}
if(t==60){
textzeileAusgeben(ausgabe,tanga2);
e++;
}
if(t==60){
textzeileAusgeben(ausgabe,tanga);
}
if(t==80){
textzeileAusgeben(ausgabe,tanga2);
e++;
}
if(t==80){
textzeileAusgeben(ausgabe,tanga);
}
if(t==100){
textzeileAusgeben(ausgabe,tanga2);
e++;
}
if(t==100){
textzeileAusgeben(ausgabe,tanga);
}
if(t==120){
textzeileAusgeben(ausgabe,tanga2);
e++;
}
if(t==120){
textzeileAusgeben(ausgabe,tanga);
}
if(t==140){
textzeileAusgeben(ausgabe,tanga2);
e++;
}
if(t==140){
textzeileAusgeben(ausgabe,tanga);
}
if(t==160){
textzeileAusgeben(ausgabe,tanga2);
e++;
}
if(t==160){
textzeileAusgeben(ausgabe,tanga);
}
// und hier ist der spass zuende! ^^

textzeileAusgeben(ausgabe,"<td><img name=\"vonOben01VonLinks01\" src=" + wert[0] + " alt=" + wert[1] + " height=\"30px\" width=\"30px\" onClick=\"klickAufFeld(this.name);\"></td>");
t++;
}
}



// Eure Methoden
// Das macht Komma suchen , weisst du
// Nach dem ersten durchlauf muss die var i auf die position des 2, Kommas liegen!(als erstes 9 )

static int i = 0;

private static String exporter(String s) {
int indexKomma;
String ausschnitt = "";
indexKomma = s.indexOf(",");
if(indexKomma >= 0) {
ausschnitt = s.substring(i,indexKomma);
return ausschnitt;
}
return "0";
}

private static String exporter2(String s) {
int indexKomma;
String ausschnitt = "";
indexKomma = s.indexOf(",");
if(indexKomma >= 0) {
i = i + indexKomma;
indexKomma = indexKomma + 2;
ausschnitt = s.substring(i,indexKomma);
i = indexKomma;
return ausschnitt;
}
return "0";
}

private static void testmethode () {
int kaestchen = 0;
for (kaestchen = 0; kaestchen < 160; kaestchen++) {
System.out.println(kaestchen);
}
}

}
 

Neue Beiträge

Zurück