2016-10-11 3 views
1

Ich habe Probleme mit meinem Trennzeichen in meinem Scanner. Ich benutze derzeit einen Scanner, um eine Textdatei zu lesen und Token in eine Zeichenfolge zu setzen. Mein Tutor hat mir gesagt, dass ich das Trennzeichen verwenden soll (useDelimiter ("\ t | \ n")). Allerdings endet jedes Token, das es ergreift, in/r (aufgrund einer Rückgabe in der Textdatei). Das ist gut für Druckzwecke, aber ich muss die Länge der Zeichenfolge erhalten. Und anstatt die Anzahl der tatsächlichen Zeichen zurückzugeben, gibt es die Anzahl der Zeichen zurück, einschließlich des/r. Gibt es ein besseres Trennzeichen, das ich verwenden kann, um dasselbe zu erreichen (ohne das/r zu greifen)? Code ist wie folgt:Probleme mit Trennzeichen (" t | n") Java

studentData.useDelimiter("\t|\n"); 
    while (studentData.hasNext()) 
    { 
     token = studentData.next(); 
     int tokenLength = token.length(); 
     statCalc(tokenLength); 
    } 

Ich bin mir bewusst, dass ich einfach das letzte Zeichen des Zeichenfolge-Tokens entfernen konnte. Aus vielen Gründen möchte ich jedoch, dass es den Token ohne das/r greift. Jede und jede Hilfe würde sehr geschätzt werden.

+0

"es enthält die Anzahl der Zeichen einschließlich der/r" ... Wenn also das letzte Zeichen "/ r" ist, subtrahiere nur eins von der Länge. – nhouser9

Antwort

2

Try this:

studentData.useDelimiter("\\t|\\R"); 

Das \R Muster passt zu jedem Zeilenumbruch finden documentation.

Ich denke, die restlichen \r Char ist ein teilweise konsumierter Zeilenumbruch in Windows-Umgebung. Mit dem oben erwähnten Begrenzer wird der Scanner die Zeile ordnungsgemäß verbrauchen.

+0

brilliant - danke –

0

ersetzen alle Wagen und Form der Rückkehr aus Ihrem string.Try diese

s = s.replaceAll("\\n", ""); 
s = s.replaceAll("\\r", ""); 
0

Windows-Stil Zeilenende ist in der Regel: \ r \ n, aber Sie ignorieren \ r als Trennzeichen. | Ihr RegexMuster (\ t \ n) kann durch die Verwendung verbessert werden:

(\t|\r\n|\r|\n)

aber es sieht für mich wie das, was Sie versuchen zu erreichen ist eine „tokenizer“ zu schaffen, die einen Text bricht Datei in Worte (da Sie auch für \ t freuen), so meine Vermutung ist, dass Sie besser mit:

studentData.useDelimiter("\\s*"); 

, die unter Berücksichtigung jeder weiß-Raum stattfinden wird. Sie können mehr über regular expressions erfahren.

Verwandte Themen