2017-05-16 3 views
3

Mein Programm liest einige Zeichenfolgen aus Datei, die nachbearbeitet werden müssen. Der ursprüngliche Text in der Datei sieht aus wieTrimmen mehrerer Zeichen in einer Zeichenfolge

A1DY^ 
BLKSS^ 
"GH67^"^ 

Wo ^ das Leerzeichen, das ich verwenden, um zu demonstrieren. Wie Sie sehen können, enden alle Wörter in der Datei mit Leerzeichen. Einige Wörter sind in Anführungszeichen gesetzt. Ich möchte diese Zeichenfolgen in meinem Programm speichern

A1DY 
BLKSS 
GH67 

Mit anderen Worten, ich möchte alle Leerzeichen und doppelte Anführungszeichen trimmen. Wenn ich str.trim(); verwende, wird das letzte Leerzeichen entfernt. Also, die dritte Zeile wird "GH67^" sein. Ich benutzte auch str.replaceAll("^\"|\"$", "");, um die Anführungszeichen zu trimmen. Das Ergebnis ist GH67^. Das heißt, ich muss es wieder schneiden.

Gibt es eine bessere Möglichkeit, alle Leerzeichen und doppelte Anführungszeichen auf einmal zu entfernen? Beachten Sie, dass ich keine alphanumerischen Zeichen extrahieren möchte. Ich möchte Sonderzeichen trimmen.

+0

Funktioniert das? https://stackoverflow.com/questions/1805518/replacing-all-no-alphanumeric-characters-with-empty-strings –

+0

Das extrahiert alphanumerische. Wenn ich 'DS-DK ^' in der Datei habe, möchte ich 'DS-DK' speichern. – mahmood

+0

Verwenden von '\ 0' anstelle von Leerzeichen könnte sinnvoller sein, da '\ 0' nie als Zeichen verwendet wird. – AppWriter

Antwort

3

Dies wird eine beliebige Anzahl von Anführungszeichen oder Leerzeichen am Anfang oder am Ende der Zeichenfolge trimmen:

str = str.replaceAll("^[ \"]+|[ \"]+$", ""); 
+2

Um häufige Anfänger Fehler zu vermeiden, fügen Sie 'str =' vor. – Andreas

+0

Technisch ist das Entfernen von führenden Leerzeichen den OP-Anforderungen entgegengesetzt, macht aber wahrscheinlich keinen Unterschied. – Andreas

+0

@Andreas Wo siehst du das? – shmosel

0

In einer engen Auslegung Ihrer Frage Beschreibung, nur Leerzeichen entfernt, nicht führende Leerzeichen Hinter wollen und keine anderen Leerzeichen wie Tabulatoren (\t).

Außerdem wird eine strikte Trimmen-Funktion nur doppelte Anführungszeichen entfernen, wenn sowohl ein führendes als auch ein nachkommendes Paar gefunden wird, und nur eine solche Menge.

Wenn doppelte Anführungszeichen vorhanden sind, sollten auch nachfolgende Leerzeichen in den Anführungszeichen entfernt werden.

all das zu erreichen, streng, in einer einzigen Regex Operation, dies zu tun:

str = str.replaceFirst("^(\"?)(.*?) *\\1 *$", "$2"); 

Diese Regex verwenden die ^ und $ Anker es nur Spiele gegen die gesamte Zeichenfolge zu gewährleisten.

Die führende " ist optional und wird als Erfassungsgruppe 1 zugeordnet, sofern vorhanden. Die nachfolgende " wird nur zugeordnet, wenn führende " wurde abgeglichen, und führende " wird nur zugeordnet, wenn nachfolgende " übereinstimmt. Dies geschieht unter Verwendung einer \1 Rückreferenz zu der optionalen führenden ". Wenn sie übereinstimmen, werden sie aus dem Ergebnis entfernt.

Es werden keine führenden Leerzeichen entfernt, aber nachfolgende Leerzeichen vor und/oder nach dem optionalen nachgestellten " werden entfernt.

Alle nicht entfernten Objekte werden in Gruppe 2 erfasst und in der Ersatzzeichenfolge beibehalten.

Verwandte Themen