split()-Methoden problem

yax

Bekanntes Mitglied
Hallöchen,

ich hab da ein, meiner meinung nach, einfaches Problem, aber ich komm einfach nicht auf die Lösung!!

Also ich habe eine .txt - Datei. Diese lese ich ein und speichere die Zeile in einen String. Diesen möchte ich dann "splitten". Den gesplitteten String speichere ich in ein Array. Und wenn ich das Array dann ausgeben möchte, bekomme ich nur komische Zeichen. Hat irgendjemand vielleicht eine Idee??

Hier mein Code:
Code :

Java:
FileReader fr = new FileReader("vokabeln.txt");
    BufferedReader br = new BufferedReader(fr);

    String vokabeln = br.readLine();
    String[] vokabelnArray = vokabeln.split("//.");
    System.out.println(vokabeln.toString());

    br.close();


Das Ergebnis ist dann immer: ÿþd

Und in der Datei steht:

deutschvokabel.englischvokabel

Hat vielleicht jemand eine Idee ?
 
Hi,

läuft das Programm unter Windows 7? Ich hatte da auch mal ein Problem mit der Zeichenkodierung.
Ich musste dann den Zeichensatz setzen:

Java:
    FileInputStream fis = new FileInputStream("datei.txt");
    InputStreamReader isr = new InputStreamReader(fis, "UTF-16");
    InputStreamReader isr = new InputStreamReader(fis);
    BufferedReader br = new BufferedReader(isr);
 
Stimmt das ist eine guute Idee 🙂

Funktioniert auch nicht, ich habe nach jedem Buchstaben so ein kleines Kästchen. 🙁
 
mach mal

Java:
System.out.println(Arrays.toString(vokabelnArray));
 
Wenn Du eine Datei einliest, solltest Du immer die Kodierung mit angeben, denn andernfalls wird die Standardkodierung Deines Benutzers oder Deines Systems genommen. Wie Deine Datei kodiert ist, kannst eigentlich nur Du wissen.

Solltest Dein Programm den Text einfach nur in der Windows-Konsole ausgeben, können ebenfalls Kodierungsfehler auftreten, da die Konsole alles in CP850 darstellt.
 
Also dabei ändert sich gar nichts wenn ich UTF-8 oder -16 nimm...

Und bei

System.out.println(Arrays.toString(vokabelnArray));

ebenfalls nichts.
 
Wie hast du die Datei geschrieben? mit notepad oder so? nehm mal einen gescheiden Editor und schreibe die Datei in UTF-8,
danach lies sie auch wieder in UTF-8 aus. Alternativ kannst du sie auch mal mit Java schreiben.
 
Moin,

String vokabeln = br.readLine();
String[] vokabelnArray = vokabeln.split("//.");
System.out.println(vokabeln.toString());

Müsste es nicht "split("\\.") sein 😳

Zudem gibst Du mit dem println ja nur den ursprünglichen String aus, nicht das Array nach dem Splitten.

Gruß
Klaus
 
So vielen dank für eure hilfen. 🙂 Ich habe es jetzt geschafft, die Vokabeln zu trennen. Aber wenn ich mir die Deutschvokabel anzeigen lasse, stehen da immer so Zeichen vor (Ausgabe: deutschvokabel). Bei der Englischvokabel funktioniert alles prima. 🙂

Aber wie bekomme ich diese Zeichen weg??
 
Java:
    System.out.println(vokabeln.toString());

Hmm gibt das nicht den Verweis auf das Array als String aus? Also ne Speicheradresse als String ... und das kann ja nur komisch Zeichen sein.

Java:
    System.out.println(vokabeln[0] + " - " + vokabeln[1]);

Gruß,
Wk
 
Moin,

Hmm gibt das nicht den Verweis auf das Array als String aus? Also ne Speicheradresse als String ... und das kann ja nur komisch Zeichen sein.
Java:
    System.out.println(vokabeln[0] + " - " + vokabeln[1]);

nur, das "vokabeln" immer noch ein String und kein Stringarray ist !!

Java:
String vokabeln = br.readLine();
String[] vokabelnArray = vokabeln.split("//.");
System.out.println(vokabeln.toString());
die Teilstrings nach den Splitten steht in "vokabelnArray" ... der String "vokabeln" ist natürlich unverändert !!

Also müsste es so aussehen:
Java:
System.out.println( vokabelnArray[0] + " - " + vokabelnArray[1] );


Gruß
Klaus
 
die Teilstrings nach den Splitten steht in "vokabelnArray" ... der String "vokabeln" ist natürlich unverändert !!

Also müsste es so aussehen:
Java:
System.out.println( vokabelnArray[0] + " - " + vokabelnArray[1] );

Autsch! Du hast natürlich recht ... damit sollte die Ausgabe von vokabeln oder vokabeln.tostring natürlich die komplette Zeile (ohne Zeichenfehler) ausgeben.

Wk
 
So, jetzt werden die Vokabeln angezeigt. Aber ich möchte jetzt wenn ich auf den Button drücke, dass überprüft wird ob die eingegbene Vokabel vom jTextField2 mit dem array[1], übereinstimmt.

Wenn ja soll int r um 1 erhöht werden, (wenn nicht, dann soll gar nichts passieren), und dann soll die nächste Vokabel ausgegeben.

Ich habe gedacht es so zu lösen, aber es kommt nicht das raus, was ich möchte. :


Java:
final String vokabel = in.readLine();
        System.out.println(vokabel);
        final String[] array = vokabel.split("\\.");
        jTextField1.setText(array[0]);
 
        jButton2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                int r = 0;
                int f = 0;
 
                if (jTextField2.getText().equals(array[1])) {
 
                    r++;
 
                    System.out.println(r);
                }
 
                String vokabel = null;
                try {
                    vokabel = in.readLine();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println(vokabel);
                String[] array = vokabel.split("\\.");
                jTextField1.setText(array[0]);
                jTextField2.setText(null);
            }
 
        });

Jemand eine Idee?

PS: Das System.out.println() ist nur zur überprüfung gedacht.
 
Hab mir jetzt nicht angeschaut was Du vorhast, aber Du verwendest hier zwei Variablen namens array und das ist glaube ich nicht gewollt und vermutlich auch die Ursache dafür, dass es - was auch immer - nicht so funktioniert wie erhofft.
[JAVA=3]final String[] array = vokabel.split("\\.");
...[/code]
[JAVA=26]String[] array = vokabel.split("\\.");[/code]
Empfehlung: sich mal den Gültigkeitsbereich der Variablen newusst machen.
Das final bei der Deklaration das Arrays scheint hier nur eine Krücke zu sein, da diese Variable eigentlich nicht final sein sollte.
 
Die Ausgabe ist:

hund.dog //String vokabeln
1 //r
Katze.cat //String vokabeln
1 //r
Maus.mouse //String vokabeln
1 //r
null //?
 

Zurück
Oben