Hallo Michael.
Ich habe ein StringBuffer und versuche die Zeilenumbrueche aus
einem Teilsteuck davon zu zaehlen.
Sowohl die Methode indexOf() von String und StringBuffer
findet „\n“ nicht.
Der Zeilenumbruch ist vom Betriebssystem abhängig
und daher immer ein besonderes Ärgernis bei der Programmierung 
Je nachdem, unter welchem Betriebssystem die Datei erstellt
oder verändert wurde, musst Du bei der Suche also nach einem
anderen Zeilenumbruch suchen.
Zur Verdeutlichung ein bisschen Spielcode ’ StringTest.java’:
import java.util.Iterator;
import java.util.Vector;
public class **StringTest** {
// constants:
final static String LINEFEED = "\012";
final static String CARRIAGE\_RETURN = "\015";
final static String UNIX\_NEWLINE = LINEFEED;
final static String DOS\_NEWLINE = CARRIAGE\_RETURN + LINEFEED;
final static String MAC\_NEWLINE = CARRIAGE\_RETURN;
final static String SYSTEM\_NEWLINE = System.getProperty("line.separator");
// methods:
public static String **determineNewlineType** (String sNewline) {
String sNewLineType = "UNKNOWN";
if (UNIX\_NEWLINE.equals(sNewline)) {
sNewLineType = "UNIX";
} else if (DOS\_NEWLINE.equals(sNewline)) {
sNewLineType = "DOS";
} else if (MAC\_NEWLINE.equals(sNewline)) {
sNewLineType = "MAC";
}
if (SYSTEM\_NEWLINE.equals(sNewline)) {
sNewLineType += " (=system default)";
}
return sNewLineType;
}
public static String **determineCurrentNewlineType** () {
String sNewlineType = determineNewlineType(System.getProperty("line.separator"));
System.out.println("Current OS '" + System.getProperty("os.name") + "' uses " + sNewlineType + " newlines");
return sNewlineType;
}
public static int **getNumberOfNewLines** (StringBuffer sb, String sNewline) {
// check argument:
if (sb == null || sb.length() testNewlineSearch(StringBuffer sb, String sTest, String sNewlineToSearch) {
String sNewlineType = determineNewlineType(sNewlineToSearch);
int iCount = getNumberOfNewLines(sb, sNewlineToSearch);
System.out.println("\*\*\* " + sTest + " searching for " + sNewlineType + " newlines: " + iCount);
}
public static void **main** (String[] args) {
determineCurrentNewlineType();
System.out.println("'LF' = " + determineNewlineType(UNIX\_NEWLINE));
System.out.println("'CRLF' = " + determineNewlineType(DOS\_NEWLINE));
System.out.println("'CR' = " + determineNewlineType(MAC\_NEWLINE));
System.out.println("'\\n' = " + determineNewlineType("\n") + "\n");
Vector vecNewlines = new Vector();
vecNewlines.add(UNIX\_NEWLINE);
vecNewlines.add(DOS\_NEWLINE);
vecNewlines.add(MAC\_NEWLINE);
for (Iterator iterator = vecNewlines.iterator(); iterator.hasNext(); ) {
String sNewlineToSearch = (String)iterator.next();
String sTest = "Text with UNIX newlines";
StringBuffer sb = new StringBuffer();
sb.append("Zeile1").append(UNIX\_NEWLINE);
sb.append("Zeile2").append(UNIX\_NEWLINE);
sb.append("Zeile3").append(UNIX\_NEWLINE);
testNewlineSearch(sb, sTest, sNewlineToSearch);
sTest = "Text with DOS newlines";
sb = new StringBuffer();
sb.append("Zeile1").append(DOS\_NEWLINE);
sb.append("Zeile2").append(DOS\_NEWLINE);
sb.append("Zeile3").append(DOS\_NEWLINE);
testNewlineSearch(sb, sTest, sNewlineToSearch);
sTest = "Text with MAC newlines";
sb = new StringBuffer();
sb.append("Zeile1").append(MAC\_NEWLINE);
sb.append("Zeile2").append(MAC\_NEWLINE);
sb.append("Zeile3").append(MAC\_NEWLINE);
testNewlineSearch(sb, sTest, sNewlineToSearch);
System.out.println("");
}
}
}
Ergibt bei mir nach Kompilation und Ausführung:
Current OS 'Windows XP' uses DOS (=system default) newlines
'LF' = UNIX
'CRLF' = DOS (=system default)
'CR' = MAC
'\n' = UNIX
\*\*\* Text with UNIX newlines searching for UNIX newlines: 3
\*\*\* Text with DOS newlines searching for UNIX newlines: 3
\*\*\* Text with MAC newlines searching for UNIX newlines: 0
\*\*\* Text with UNIX newlines searching for DOS (=system default) newlines: 0
\*\*\* Text with DOS newlines searching for DOS (=system default) newlines: 3
\*\*\* Text with MAC newlines searching for DOS (=system default) newlines: 0
\*\*\* Text with UNIX newlines searching for MAC newlines: 0
\*\*\* Text with DOS newlines searching for MAC newlines: 3
\*\*\* Text with MAC newlines searching for MAC newlines: 3
Gruß,
-Andreas.