Zeilenumbruch erkennen

Status
Nicht offen für weitere Antworten.

BlackViruZ

Aktives Mitglied
Hallo ihr Entwickler!
Also, ich muss in einem Programm Text-Input (von einem JTextArea, also String) verarbeiten und dabei auch Zeilenansätze erkennen - das Problem:
Ich benutze einen StringTokenizer, lediglich mit den Begrenzern Leerzeichen und String.format("%n") (möchte es Plattform unabhängig machen).
Da auch Namen mit Leerzeichen vorkommen können, lass ich die Begrenzer mit ausgeben daher:
Code:
final String delim1 = " ", delim2 = String.format("%n");
		StringTokenizer buffer = new StringTokenizer(input, delim1 + delim2,
				true);
Soweit so gut, nur wenn ich jetzt mir die Tokens wieder geben lasse (per nextToken) und feststellen will, ob es sich um einen Zeilenumbruch handelt funktioniert es nicht
Code:
do {
	token = buffer.nextToken();
} while (token.equals(delim1)
	|| token.equals(delim2));
Dies klappt nicht!!!
Ich musste token.equals(delim2) gegen token.equals("\n") austauschen, damit der Zeilenumbruch erkannt wird -
das macht es natürlich Plattformabhängig.
Kann mir jmd da helfen?

MfG Blacky
 

Ariol

Top Contributor
Ähm, hab mir grad deinen ersten Eintrag noch mal durchgelesen.

JTextField kann nur eine Reihe Code haben - da ist nichts mit "\n"
Bei anderen(JTextArea) sollte es so funktionieren.

Code:
input.split(System.getProperty("line.separator"))


http://java.sun.com/javase/6/docs/api/java/util/StringTokenizer.html hat gesagt.:
StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

The following example illustrates how the String.split method can be used to break up a string into its basic tokens:

String[] result = "this is a test".split("\\s");
for (int x=0; x<result.length; x++)
System.out.println(result[x]);


prints the following output:

this
is
a
test
 

BlackViruZ

Aktives Mitglied
Ariol hat gesagt.:
Ähm, hab mir grad deinen ersten Eintrag noch mal durchgelesen.

JTextField kann nur eine Reihe Code haben - da ist nichts mit "\n"
Bei anderen(JTextArea) sollte es so funktionieren.

Code:
input.split(System.getProperty("line.separator"))


http://java.sun.com/javase/6/docs/api/java/util/StringTokenizer.html hat gesagt.:
StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

The following example illustrates how the String.split method can be used to break up a string into its basic tokens:

String[] result = "this is a test".split("\\s");
for (int x=0; x<result.length; x++)
System.out.println(result[x]);


prints the following output:

this
is
a
test

Joa hatte mich vertippt, es aber vor ein paar minuten korrigiert (haben uns wohl verpasst^^)
Also ich benutze in der Tat eine JTextArea
Bei der split Methode weiß ich aber nicht genau wie ich anstellen kann, was ich möchte, denn ich brauche ja (wie oben gesagt) auch die zeichen, welche als begrenzung eingegeben sind
 

Ariol

Top Contributor
Und? Split benutzt regex:

Code:
	String test = "Hallo\nWie geht es denn?";
	String[] lines = test.split("\\s|" + System.getProperty("line.separator"));
	for(int i = 0; i < lines.length; i++)
	{
		System.out.println(i + ":" + lines[i]);
	}

Ausgabe:
Code:
0:Hallo
1:Wie
2:geht
3:es
4:denn?
 

BlackViruZ

Aktives Mitglied
ich bräuchte eher
0:Hallo 1:
2:wie 3: 4:geht 5: 6:es 7: 8:denn?

Da liegt der Hase begraben^^
Ich habe nämlich keine Ahnung wie ich die Begrenzungen mit regex als eigenen "Token" ausgeben lassen soll
 
S

Spacerat

Gast
Versuchs mal mit dem Grossen Bruder des StringTokenizers, dem StreamTokenizer. Dort kann man allerdings nur einzelne Zeichen als Token definieren. Deswegen kann z.B. der MS-Dos Zeilenumbruch ("\n\r" oder vllt. doch andersrum??) nur mit einem "Trick" (der "pushBack()"-Methode) erfolgreich erkannt werden.

mfg Spacerat
 

BlackViruZ

Aktives Mitglied
Spacerat hat gesagt.:
Versuchs mal mit dem Grossen Bruder des StringTokenizers, dem StreamTokenizer. Dort kann man allerdings nur einzelne Zeichen als Token definieren. Deswegen kann z.B. der MS-Dos Zeilenumbruch ("\n\r" oder vllt. doch andersrum??) nur mit einem "Trick" (der "pushBack()"-Methode) erfolgreich erkannt werden.

mfg Spacerat
Hakt es im Endeffekt dann nicht wieder mit der Plattform-unabhängigkeit?
Das ist ja schließlich das einzige Problem, die Windows-Variante funktioniert schon^^
 
S

Spacerat

Gast
Nee... Der Trick ist eigentlich nur der, dass wenn ein "\r" gelesen wird, darauf getestet werden muss, ob darauf ein "\n" folgt. Das bedeutet, das das nächste Zeichen gelesen werden muss. Ist es ein "\n" handelt es sich um einen MS-Dos-Zeilenumbruch ("\r\n" so rum ist's richtig :) ). Ist es kein "\n" muss das Zeichen mit "pushBack()" zurückgelegt werden.

mfg Spacerat
 

BlackViruZ

Aktives Mitglied
Ich meinte ja auch eher wegen der Formulierung "MS-Dos",
wie kann ich denn dann für Plattform-Unabhängigkeit sorgen?
(Muss ich mir die dafür kompletten Zeilenumbruchs-Indikatoren von den verbreiteten Plattformen rausschreiben?!)
 

mahe

Aktives Mitglied
Sind ja nur drei verschiedene Kombinationen mit zwei "Zeichen":

Mac: CR
Linux: LF
Windows: CR+LF
 
S

Spacerat

Gast
Würd' ich mal mit Ja beantworten. Aber keine Panik. Ich weiss zwar nicht wie der Zeilenumbruch bei MacOS aussieht, aber Windows stellt in diesem Fall wohl eine Ausnahme dar, weil der ZU auf allen anderen Systemen die ich kenne eben nur das LineFeed ("\n") ist.

mfg Spacerat

@Edit: War da wieder jemand schneller... und das auch noch mit 'ner vollständigeren Aussage... Danke für die Info.
 

BlackViruZ

Aktives Mitglied
Okay, dann danke für die Hilfe,
Ich probiere das ganze später und kümmer mich jetzt erstmal um den Rest-Quellcode (vorab Windows-basierend^^)
Die umstellung auf die anderen Platformen mache ich dann später (ich verschiebe es erst mal mich damit rum-zuschlagen^^)
Falls ich noch Probleme damit haben sollte - mach ich mal ne wiederbelebung von dem Thread hier^^

MfG & lg der Black!
 

didjitalist

Bekanntes Mitglied
lass java die ganze arbeit tun. stopf den den string in einen CharArrayReader und lies die zeilen dann mit nem BufferedReader.
 

BlackViruZ

Aktives Mitglied
Ansich die Idee ist ganz nett, um so mit Readline einfach eine Zeile zu lesen - dann wüsste man ja auch das am Ende des Strings ein Zeilenumbruch wäre - aber ich glaube ich benutze lieber die andere Variante (auf \n, \r und \n\r zu überprüfen - da ich schon an der Windows-only Variante gearbeitet habe ist es so einfacher (ansonsten müsste ich die komplette Programm-Struktur für das Parsen des input verändern -.-)
Außerdem habe ich mal beim BufferedReader API geschaut - Readline macht ja auch nichts anderes als bis zum nächsten \n, \r, \n\r zu lesen

Müsste die Abfrage auf die 3 Indikatoren nicht auch mit einem StringTokenizer funktionieren?
Der wäre mir lieber, ist einfacher zu handhaben als der StreamTokenizer :)

Noch ne kleine Frage zum Schluss: WARUM hat Sun sich dazu entschlossen den StringTokenizer nur noch aus kompabiltäts-gründen in der Bibliothek zu behalten? Ist doch echt praktisch, das Ding (praktischer als String.split zumindest)
 
S

Spacerat

Gast
BlackViruZ hat gesagt.:
Noch ne kleine Frage zum Schluss: WARUM hat Sun sich dazu entschlossen den StringTokenizer nur noch aus kompabiltäts-gründen in der Bibliothek zu behalten? Ist doch echt praktisch, das Ding (praktischer als String.split zumindest)
Das erfährt man ebenfalls im API: wegen "java.util.regex". Hat lange gedauert, bis SUN den Weg zu RegularExpressions gefunden hat (seit JRE1.4 lt API). Die sind noch um einiges vieles praktischer. Und aus Kompatibilitätsgründen drinnen gelassen ist gut... Für "Gewohnheits-Rechtler" nicht als "deprecated" eingestuft triffts besser, wenn man bedenkt was da alles als solches im API rumvegetiert, damit "JRE1.0" Applikationen auch ja noch unter "JRE1.7" laufen.

mfg Spacerat
 
K

Kaffeemaschinist

Gast
Regular expression:
Das Token für Whitespace ist \s, das erkennt dann also sämtliche Sachen von Tabulator, Leerzeichen bis hin zu den drei möglichen Newline-Sequenzen.

Z.B.
Code:
([^\s]*)([\s]*)

In der ersten Gruppierung findest du dann jeweils den Text, in der zweiten die Whitespaces. Da das Ding auch auf einen leeren String anspringt, müsstest du das vorher rausnehmen.
 

BlackViruZ

Aktives Mitglied
Kaffeemaschinist hat gesagt.:
Regular expression:
Das Token für Whitespace ist \s, das erkennt dann also sämtliche Sachen von Tabulator, Leerzeichen bis hin zu den drei möglichen Newline-Sequenzen.
Ich muss zwischen einem Leerzeichen und einer Newline Sequenz unterscheiden, daher bringt mir das nicht viel
Ich habe jetzt einfach (zur einfacheren Handhabung) eine Methode geschrieben:
Code:
private boolean isNewlineToken(String token){
  return token.equals("\n")||token.equals("\r")||token.equals("\r\n");
}
Das funktioniert soweit ganz gut, also brauche ich keine weitere Hilfe :toll:

@EDIT: Okay, jetzt verstehe ich erst was du mit 1.Gruppe und 2.Gruppe meinst - dein Vorschlag wäre also eine Möglichkeit gewesen - wie dem auch sei (jetzt habe ich ja eine lösung^^)
Sry für das kleine Missverständniss
 
S

Spacerat

Gast
Das mit dem StreamTokenizer? Dann fürchte ich, das bei Windows-Dateien die neue Zeile mit einem LineFeed beginnt, da dieser nur einzelne Zeichen als Token akzeptiert. Deswegen ist
Code:
equals("\r\n")
relativ nutzlos. Vielmehr muss bei "\r" ein weiteres Zeichen gelesen werden und wenn es nicht "\n" ist zurück geschrieben werden.
Code:
public boolean isNewLineToken(String token, StreamTokenizer st)
{
    if(token.equals("\n") return true;
    if(token.equals("\r") {
        st.nextToken();
        if(!st.sval.equals("\n") st.pushBack();
        return true;
    }
    return false;
}

mfg Spacerat
 

BlackViruZ

Aktives Mitglied
Spacerat hat gesagt.:
Das mit dem StreamTokenizer? Dann fürchte ich, das bei Windows-Dateien die neue Zeile mit einem LineFeed beginnt, da dieser nur einzelne Zeichen als Token akzeptiert. Deswegen ist
Code:
equals("\r\n")
relativ nutzlos. Vielmehr muss bei "\r" ein weiteres Zeichen gelesen werden und wenn es nicht "\n" ist zurück geschrieben werden.

Ich benutze den StringTokenizer, nicht den StreamTokenizer
 
S

Spacerat

Gast
Aha...? Wer lesen kann ist klar im Vorteil??! ;-)

@Edit: me too... also vergiss den Sch...
 

BlackViruZ

Aktives Mitglied
np
Läuft ja, jetzt gehts in die nächste Stage^^

Dennoch danke für die schnelle (und ausführliche) Hilfe!

MfG & lg BlackViruZ
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Input/Output Zeilenumbruch Allgemeine Java-Themen 4
OnDemand Zeilenumbruch ignorieren möglich? Allgemeine Java-Themen 1
J XML Dokument Zeilenumbruch in den Quellcode einfügen Allgemeine Java-Themen 5
T ArrayList zeilenumbruch entfernen Allgemeine Java-Themen 13
J Zeilenumbruch per JAVA_OPTS steuern Allgemeine Java-Themen 1
AssELAss String jeweils nach x Zeichen Zeilenumbruch Allgemeine Java-Themen 1
AssELAss Zeilenumbruch immer nach bestimmtem Zeichen Allgemeine Java-Themen 1
H Zeilenumbruch in Quellcode Allgemeine Java-Themen 4
J Zeilenumbruch - Excel Export HSSF Allgemeine Java-Themen 10
E Zeilenumbruch html Allgemeine Java-Themen 3
E Eclipse automatischen Zeilenumbruch unterbinden Allgemeine Java-Themen 2
K String: alle X Zeichen Zeilenumbruch Allgemeine Java-Themen 3
T Swing JTextAera Zeilenumbruch entfernen Allgemeine Java-Themen 7
C OpenOffice Writer und Zeilenumbruch Allgemeine Java-Themen 4
J Regulärer Ausdruck - Der Punkt und der Zeilenumbruch Allgemeine Java-Themen 6
J Drucken mit drawString() und Zeilenumbruch Allgemeine Java-Themen 3
D JExcelAPI -> Zeilenumbruch? Allgemeine Java-Themen 2
S zeilenumbruch in TextArea Allgemeine Java-Themen 5
C Zeilenumbruch aus JTextArea entfernen Allgemeine Java-Themen 6
R automatischer zeilenumbruch Allgemeine Java-Themen 2
R zeilenumbruch Allgemeine Java-Themen 2
K Zeilenumbruch in Eclipse beim Codeformater verhindern Allgemeine Java-Themen 10
S Zeilenumbruch nicht von Java interpretieren Allgemeine Java-Themen 5
B String + Zeilenumbruch nach X-Zeichen Allgemeine Java-Themen 4
G Zeilenumbruch beim BufferedWriter? Allgemeine Java-Themen 3
G Javadoc Zeilenumbruch Allgemeine Java-Themen 2
E Zeilenumbruch in einer Textdatei Allgemeine Java-Themen 2
G Zeilenumbruch Allgemeine Java-Themen 15
B Zeilenumbruch bei Schreiben einer Textdatei Allgemeine Java-Themen 10
G JEditorPane Zeilenumbruch Allgemeine Java-Themen 1
N Zeilenumbruch in String nach jeweils x Zeichen einfügen? Allgemeine Java-Themen 6
G Zeilenumbruch in Subview Allgemeine Java-Themen 2
T - Zeilenumbruch entfernen Allgemeine Java-Themen 2
J Zeilenumbruch löschen Allgemeine Java-Themen 10
K Zeilenumbruch String Allgemeine Java-Themen 3
C Zeilenumbruch bei JTextArea Allgemeine Java-Themen 10
G Mit FileWriter Zeilenumbruch schreiben Allgemeine Java-Themen 8
bummerland Zeilenumbruch aus JTextArea Allgemeine Java-Themen 1
K Bildschirm auslesen/ Text erkennen Allgemeine Java-Themen 5
I Best Practice Kreise erkennen Allgemeine Java-Themen 1
N Erkennen eines Programs Allgemeine Java-Themen 2
P Strukturänderungen/abnormalien in Logfiles automatisch erkennen Allgemeine Java-Themen 5
A 2D-Grafik Einfachster Ansatz, um sich wiederholende Figur in einem 2D-Image zu erkennen Allgemeine Java-Themen 1
T Java Windows sounds erkennen Allgemeine Java-Themen 1
M Backslash erkennen Allgemeine Java-Themen 4
D Flasche Eingabe erkennen Allgemeine Java-Themen 4
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
I Datei zugriffe erkennen Allgemeine Java-Themen 25
A Großbuchstaben erkennen (Prozente) Allgemeine Java-Themen 2
U Erkennen, ob PC benutzt wird Allgemeine Java-Themen 4
B Erkennen, wann Prozess beendet ist, dann Thread beenden. Allgemeine Java-Themen 6
S Generellen MausKlick am PC erkennen Allgemeine Java-Themen 1
J Erkennen, ob Programm in JAR (neues Problem) Allgemeine Java-Themen 7
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
T Sechsecke, erkennen von bestimmten Werten Allgemeine Java-Themen 9
M Erkennen, in welcher Methode sich die VM befindet Allgemeine Java-Themen 6
Hoppelmann "Variable" in String erkennen Allgemeine Java-Themen 2
D IP / Domain in einem String erkennen Allgemeine Java-Themen 2
J jexcelapi - Erkennen von Sheets Allgemeine Java-Themen 3
B Mausbewegung im Thread erkennen (hoch/runter) Allgemeine Java-Themen 6
K Quadrat in einem Bild erkennen Allgemeine Java-Themen 33
D Regex Raute erkennen Allgemeine Java-Themen 2
F Groovy Erkennen geometrischer Formen in einem Kantenbild Allgemeine Java-Themen 4
K Wiederholungen in Datensatz erkennen?! Allgemeine Java-Themen 6
S Wörter ohne Leerzeichen erkennen Allgemeine Java-Themen 5
M Festplatte am Namen erkennen Allgemeine Java-Themen 2
A Erkennen welches Fenster bei windowDeactivated aktiviert wird? Allgemeine Java-Themen 2
C Reguläre Ausrücke Punkte im Satz richtig erkennen Allgemeine Java-Themen 6
J Exe Datei in Java erkennen??? Allgemeine Java-Themen 4
P Netzlaufwerke erkennen Allgemeine Java-Themen 3
H File Attribut bzw Link erkennen Allgemeine Java-Themen 5
DamienX Debug Modus zur Laufzeit erkennen Allgemeine Java-Themen 3
data89 Barcodes in Bild erkennen Allgemeine Java-Themen 17
G Wechseldatenträger erkennen Allgemeine Java-Themen 5
T Shapes vergleichen? Zeichen erkennen? Allgemeine Java-Themen 7
Daniel_L RTF - Format aus Zwischenablage erkennen und "einlesen"? Allgemeine Java-Themen 5
H Dateiende erkennen, wie? Allgemeine Java-Themen 7
S Dateiart erkennen Allgemeine Java-Themen 13
X Position eines Gegenstandes über Webcam erkennen Allgemeine Java-Themen 11
S unter UNIX - (symbolic) links erkennen? Allgemeine Java-Themen 12
D Datum korrekt erkennen Allgemeine Java-Themen 27
G Stringformen erkennen Allgemeine Java-Themen 8
N Endlosschleifen automatisiert erkennen (Code oder Laufzeit)? Allgemeine Java-Themen 6
G Größte zusammenhängende Fläche erkennen Allgemeine Java-Themen 3
K ersten programmstart erkennen Allgemeine Java-Themen 7
S JTree selektion erkennen und drauf reagieren Allgemeine Java-Themen 2
E Regexfrage (' erkennen) Allgemeine Java-Themen 4
C WindowStyle von Windows erkennen. Allgemeine Java-Themen 3
J Erkennen aus welchem Pfad das Jar gestartet wurde Allgemeine Java-Themen 6
B Erkennen welche Objekte den Heap verbrauchen? Allgemeine Java-Themen 2
MQue JButton erkennen Allgemeine Java-Themen 2
V Erkennen ob das Programm aus Jar File geladen wurde Allgemeine Java-Themen 9
T Einfachen Ton erkennen Allgemeine Java-Themen 7
R Hinzufügen von Dateien in einem Verzeichniss Auto. erkennen! Allgemeine Java-Themen 15
L objekte erkennen? Allgemeine Java-Themen 9
M Encoding automatisch erkennen Allgemeine Java-Themen 4
J Programmteile erkennen? Allgemeine Java-Themen 4
H Exception erkennen Allgemeine Java-Themen 10
S Farbe erkennen! Allgemeine Java-Themen 3
H existierende dateien erkennen Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben