2016-04-04 7 views
0

Die Definition von "StringEscapeUtils.unescapeCsv" besagt, dass doppelte Anführungszeichen entfernt werden, aber in meinem Fall tut es nichts.Commons lang StringEscapeUtils.unescapeCsv entfernt keine Anführungszeichen

String value = StringEscapeUtils.unescapeCsv(a[1] ); 

(Wert eines 1 = „\“ Rufen Sie uns an \ „“ und der resultierende Wert ist „\“ Rufen Sie uns \ „“)

den Debugger Bildschirm Sehen Sie, wenn Sie es nicht glauben . Ist das nur ein Fehler? enter image description here

Antwort

-1

Es ist kein Fehler. Es funktioniert genau wie beabsichtigt. Die documentation Staaten:

Wenn der Wert in doppelten Anführungszeichen eingeschlossen ist, und enthält ein Komma, Newline oder doppelte Anführungszeichen, dann zitiert werden entfernt.

die in den folgenden Fällen bedeutet die umliegenden doppelte Anführungszeichen entfernt werden:

StringEscapeUtils.unescapeCsv("\"Call \n us!\""); // -> Call \n us! 
StringEscapeUtils.unescapeCsv("\"Call, us!\""); // -> Call, us! 
StringEscapeUtils.unescapeCsv("\"Call \" us!\""); // -> Call " us! 

in Ihrem Fall jedoch folgendes gilt:

Wenn der Wert in doppelte Anführungszeichen nicht eingeschlossen ist, , oder ist und enthält kein Komma, Newline oder doppelte Anführungszeichen, dann wird der String-Wert unverändert zurückgegeben.

, die die umliegenden doppelten Anführungszeichen bedeuten nicht entfernt:

StringEscapeUtils.unescapeCsv("\"Call us!\""); // -> "Call us!" 

Statt auf String.split() zu verlassen, und StringEscapeUtils.unescapeCsv() Sie einen richtigen CSV-Parser wie Apache Commons CSV verwenden sollten.

+0

Der einzige Unterschied zwischen Ihren zwei Angebotsblöcken, neben den zusätzlichen zwei Zeilen (erste und dritte waren unnötig), ist, dass Sie ein Komma hinzugefügt haben. Ich habe jeden Charakter überprüft. unescapeCsv ("Rufen Sie uns an!"); // -> "Ruf uns an!" unescapeCsv ("\" Ruf uns! \ ""); // -> Ruf uns an! – user1122069

+0

Danke auch für den Commons CSV Vorschlag. Ich hätte etwas Ähnliches verwenden sollen, aber ich entschied mich dafür, .replace ("\" "," ") zu verwenden. Ersetze (" '"," "), da es zu meinem speziellen Anwendungsfall passt. – user1122069

+0

Ja, der einzige Unterschied ist das hinzugefügte Komma. ** Das ist der springende Punkt. ** 'unescapeCsv() 'hat nicht so funktioniert, wie du es erwartet hast. Also habe ich dir erklärt ** warum ** nicht funktioniert. ** Weil es nur funktioniert wenn es da ist ein Komma ** (oder Newline oder Doppelzitat) –