# String array



## edsie2011 (18. Jan 2012)

Hallo ich wollte aus einer txt Datei string array lesen was aber nicht so klappt.
Bräuchte etwas hilfe.


```
private String PathUsers = "F:\\twitter\\user.txt"; 
File lg = new File ( PathUsers )
{
	 BufferedReader abc = new BufferedReader(new FileReader("F:\\twitter\\user.txt"));
	 while (abc.readLine() == 1){// hier kommt ein fehler!!
		 String[] Benutzer = abc.readLine().split(";");
	 }
	 
 }
```

Der soll aus einer Text Datei
ID;Ben;PWD;
ID;Ben2;PWD;
...


----------



## eRaaaa (18. Jan 2012)

while (abc.readLine() == 1){// hier kommt ein fehler!!

Was liefert denn readLine zurück? Richtig einen String, und damit ist der Vergleich mit 1 falsch! 
p.s.: readLine liest wirklich eine Zeile, d.h. du würdest hier Zeilen verschlucken, da du mit diesen ja nichts weiter machst!


----------



## Gossi (18. Jan 2012)

edsie2011 hat gesagt.:


> ```
> private String PathUsers = "F:\\twitter\\user.txt";
> File lg = new File ( PathUsers )
> {
> ...



Versuchs so....


----------



## eRaaaa (18. Jan 2012)

Gossi hat gesagt.:


> Versuchs so....


Zeile 13 lieber so: 
	
	
	
	





```
String[] benutzerArr = benutzer.toArray(new String[0]);
```
(und die eine if-Abfrage kann man sich auch sparen wenn man die while etwas umbaut )


----------



## Final_Striker (18. Jan 2012)

edsie2011 hat gesagt.:


> Bräuchte etwas hilfe.



Ich verstehe nicht warum es dir Leute immer so schwer machen? Ich gibt doch im Netz mindestens eine Million Beispiele wie man eine Textdatei zeilenweise einlesen kann.

z.B. so:


```
try {
		BufferedReader in = new BufferedReader(new FileReader("text.txt"));
		String zeile = null;
		while ((zeile = in.readLine()) != null) {
			System.out.println("Gelesene Zeile: " + zeile);
		}
	} catch (IOException e) {
		e.printStackTrace();
	}
```


----------



## Gast2 (18. Jan 2012)

@Gossi:
Auch da sind zwei readLines() drin, da wird ebenfalls jede zweite Zeile verschluckt.


----------



## Gossi (18. Jan 2012)

EikeB hat gesagt.:


> @Gossi:
> Auch da sind zwei readLines() drin, da wird ebenfalls jede zweite Zeile verschluckt.



Wenn du mir jetzt sagen könntest wo dort bitte das zweite ist :bahnhof:

@ eraaaa

So besser? ^^


```
private String PathUsers = "F:\\twitter\\user.txt"; 
File lg = new File ( PathUsers )
{
     BufferedReader abc = new BufferedReader(new FileReader("F:\\twitter\\user.txt"));
     List<String> benutzer = new ArrayList<String>();
     String newLine = abc.readLine();
     while (newLine != null) {
          benutzer.add(newLine);
          newLine = abc.readLine();
     }
     String[] benutzerArr = benutzer.toArray(new String[0]);
 }
```


----------



## eRaaaa (18. Jan 2012)

Gossi hat gesagt.:


> @ eraaaa
> 
> So besser? ^^



Zumndest gibts so keine Exception mehr :toll:


----------



## edsie2011 (18. Jan 2012)

Gossi hat gesagt.:


> Versuchs so....




```
String newLine = " "; //hier reist er den fehlerSyntax error on token ";", { expected after this token
```

Wieso hier?


----------



## Gossi (18. Jan 2012)

edsie2011 hat gesagt.:


> ```
> String newLine = " "; //hier reist er den fehlerSyntax error on token ";", { expected after this token
> ```
> 
> Wieso hier?



Das ist eine Gute Frage.

@ eRaaaa

Ne Exception?

Achso, das ganze muss natürlich in einen try - catch Block ^^


----------



## SlaterB (18. Jan 2012)

lerne von nun an: Syntaxfehler beziehen sich meist auf das große Ganze, 20 Zeilen vorher oder nachher kann eine Klammer fehlen,
der Compiler könnte schlauer warnen, aber das Glück besteht eben zur Zeit nicht

siehe
java - Syntax error on token ";", { expected after this token - Stack Overflow
oder andere Ergebnisse bei Eingabe der Fehlermeldung in Suchmaschinen


"after this token" ist freilich ein gar nicht so schlechter Hinweis, dass es um die NÄCHSTE Zeile geht


----------



## eRaaaa (18. Jan 2012)

Gossi hat gesagt.:


> Das ist eine Gute Frage.
> @ eRaaaa
> Ne Exception?


Ja dein Cast würde eine ClassCastException ergeben! 

```
List<String> benutzer = new ArrayList<String>(Arrays.asList("Hallo","Exception"));
		//   String[] benutzerArr = (String[]) benutzer.toArray();
		   String[] benutzerArr2 =  benutzer.toArray(new String[0]);
```

toArray liefert Object[] -> 
	
	
	
	





```
String[] arr = (String[])new Object[]{"Hallo Excetion"};
```


----------



## Gossi (18. Jan 2012)

eRaaaa hat gesagt.:


> Ja dein Cast würde eine ClassCastException ergeben!
> 
> ```
> List<String> benutzer = new ArrayList<String>(Arrays.asList("Hallo","Exception"));
> ...


Darf ich dich daran erinnern: 


eRaaaa hat gesagt.:


> Zeile 13 lieber so:
> 
> 
> 
> ...







SlaterB hat gesagt.:


> l
> "after this token" ist freilich ein gar nicht so schlechter Hinweis, dass es um die NÄCHSTE Zeile geht



Stimmt, das fehlt schon beim File ^^


----------



## Gast2 (18. Jan 2012)

> Wenn du mir jetzt sagen könntest wo dort bitte das zweite ist


Sorry, habs nur überflogen, readLine... newLine... das schaut so änhlich aus


----------



## edsie2011 (18. Jan 2012)

Mein problem lag weiter oben

```
File lg = new File ( PathUsers ); // hatte ; vergessen
```

Eclipse wollte alles umgehen


```
private String PathUsers = "F:\\twitter\\user.txt"; 
 File lg = new File ( PathUsers );
 {
      BufferedReader abc = null;
	try {
		abc = new BufferedReader(new FileReader("F:\\twitter\\user.txt"));
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
      List<String> benutzer = new ArrayList<String>();
      String newLine = null;
	try {
		newLine = abc.readLine();
	} catch (IOException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}
      while (newLine != null) {
           benutzer.add(newLine);
           try {
			newLine = abc.readLine();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
      }
  }
```

irgend wie störte es alles:rtfm:


----------



## eRaaaa (18. Jan 2012)

Gossi hat gesagt.:


> Darf ich dich daran erinnern:




Keine Ahnung was du mir damit sagen willst, oder du versteht einfach noch immer nicht was ich sagen wollte....nimm mal ne IDE zur Hand und tippe meinen Code ein und kommentiere die eine Zeile aus...???:L:bahnhof:


----------



## Gossi (18. Jan 2012)

```
try {
     String PathUsers = "F:\\twitter\\user.txt";
     File lg = new File ( PathUsers );
     BufferedReader abc = new BufferedReader(new FileReader(lg));
     List<String> benutzer = new ArrayList<String>();
     String newLine = abc.readLine();
     while (newLine != null) {
          benutzer.add(newLine);
          newLine = abc.readLine();
     }
     String[] benutzerArr = benutzer.toArray(new String[0]);
} catch (IOException ex) {
     ex.printStackTrace();
}
```

Getestet und das Funktioniert.


----------



## eRaaaa (18. Jan 2012)

Zeile 11 ist ja auch mein Code...ach vergiss es, denke wir reden hier aneinander vorbei  (ich sprach von deinem ursprünglichen Code, nach deiner Verbesserung schrieb ich ja: jetzt gibts zumindest *KEINE* Excepion mehr)
Egal, ist eh alles fast off-topic


----------



## edsie2011 (18. Jan 2012)

Gossi hat gesagt.:


> ```
> try {
> String PathUsers = "F:\\twitter\\user.txt";
> File lg = new File ( PathUsers );
> ...



Kannst du mir kommplet mit methoden aufruf zu senden bei mir will es nicht sry


----------



## Schandro (18. Jan 2012)

> Kannst du mir kommplet mit methoden aufruf zu senden bei mir will es nicht sry


Ist es so schwer den Stack Trace bzw. eine Fehlerbeschreibung zu posten?


----------



## faetzminator (18. Jan 2012)

Das [c]benutzer.toArray(new String[0]);[/c] kann man aber auch machen, ohne dass zwei Arrays erstellt werden müssen, nämlich so: [c]benutzer.toArray(new String[benutzer.size()]);[/c]


----------



## irgendjemand (18. Jan 2012)

wäre nicht auch [c]String.class[][/c] möglich um die erzeugung vom array komplett zu unterdrücken ?


----------



## eRaaaa (18. Jan 2012)

irgendjemand hat gesagt.:


> wäre nicht auch [c]String.class[][/c] möglich um die erzeugung vom array komplett zu unterdrücken ?



Nö, was soll das sein?!


----------



## Gast2 (18. Jan 2012)

Irgendwo her muss das Array doch kommen in das die benutzer hält  Übergibt man ein Array der passenden Länge wird das genutzt. Ansonsten wird nen neues in passender Länge erstellt.


----------



## irgendjemand (18. Jan 2012)

eRaaaa hat gesagt.:


> Nö, was soll das sein?!



bleib doch mal ruhig ... war doch nur ne frage ob das möglich ist ...


----------



## eRaaaa (18. Jan 2012)

Bin ruhig und ich sage nur dass ich der Meinung bin dass das nicht geht. Was soll denn deiner Meinung nach 
	
	
	
	





```
String.class[]
```
 für ein Konstrukt sein?


----------



## irgendjemand (18. Jan 2012)

ähm ... GAR KEINER ... sondern lediglich der TYP String[] ... wobei ich glaub wenn man [c].class[/c] anhängt würde [c]java.lang.String[][/c] rauskommen wonach toArray() [c]Class[][/c] bzw [c]Class...[/c] als argument bräuchte


----------



## Gossi (19. Jan 2012)

faetzminator hat gesagt.:


> Das [c]benutzer.toArray(new String[0]);[/c] kann man aber auch machen, ohne dass zwei Arrays erstellt werden müssen, nämlich so: [c]benutzer.toArray(new String[benutzer.size()]);[/c]



Wobei das bei der Rechenzeit keinen/keinen merkbaren unterschied macht, lediglich vom Speicher her...


----------



## faetzminator (19. Jan 2012)

Klar, es macht beides keinen grossen Unterschied - sowohl von der Performance als auch von der Speicherauslastung. Aber wenn man das Array sowieso übergeben muss, um den richtigen Typen zu erhalten, kann man das Array gleich in der richten Grösse übergeben.


----------



## Gossi (19. Jan 2012)

faetzminator hat gesagt.:


> Klar, es macht beides keinen grossen Unterschied - sowohl von der Performance als auch von der Speicherauslastung. Aber wenn man das Array sowieso übergeben muss, um den richtigen Typen zu erhalten, kann man das Array gleich in der richten Grösse übergeben.



Da hast du natürlich recht...


----------

