Antworten:
Sie können String#replaceAll()
mit einem Muster ^\"|\"$
dafür verwenden.
Z.B
string = string.replaceAll("^\"|\"$", "");
Weitere Informationen zu regulären Ausdrücken finden Sie unter http://regular-expression.info .
Das riecht ein bisschen so, als würden Sie versuchen, einen CSV-Parser zu erfinden. In diesem Fall würde ich vorschlagen, sich nach vorhandenen Bibliotheken wie OpenCSV umzusehen .
String#indexOf()
, String#substring()
Methoden und so weiter. Es ist nur ein bisschen schneller, aber es ist viel mehr Code. @GK: Äh, hast du den Regex gelesen / verstanden oder sogar getestet?
^\"|\"$
. |
bedeutet "oder". Es wird also entweder ^\"
oder übereinstimmen \"$
. ^
Entspricht dem Anfang der Zeichenfolge und dem $
Ende der Zeichenfolge. ^\"
bedeutet, dass ein Anführungszeichen am Anfang der Zeichenfolge und \"$
ein Anführungszeichen am Ende der Zeichenfolge übereinstimmt.
Verwenden Sie: Entfernen Sie das erste und das letzte Zeichen aus der Zeichenfolge:
myString = myString.substring(1, myString.length()-1);
Auch mit Apache StringUtils.strip()
:
StringUtils.strip(null, *) = null
StringUtils.strip("", *) = ""
StringUtils.strip("abc", null) = "abc"
StringUtils.strip(" abc", null) = "abc"
StringUtils.strip("abc ", null) = "abc"
StringUtils.strip(" abc ", null) = "abc"
StringUtils.strip(" abcyx", "xyz") = " abc"
So,
final String SchrodingersQuotedString = "may or may not be quoted";
StringUtils.strip(SchrodingersQuotedString, "\""); //quoted no more
Diese Methode funktioniert sowohl mit Zeichenfolgen in Anführungszeichen als auch in Zeichenfolgen ohne Anführungszeichen, wie in meinem Beispiel gezeigt. Der einzige Nachteil ist, dass nicht nach streng übereinstimmenden Anführungszeichen gesucht wird, sondern nur nach führenden und nachfolgenden Anführungszeichen (dh keine Unterscheidung zwischen "partially
und "fully"
Anführungszeichen).
Wenn die doppelten Anführungszeichen nur am Anfang und am Ende existieren, würde ein einfacher Code wie dieser perfekt funktionieren:
string = string.replace("\"", "");
Dies ist der beste Weg, doppelte Anführungszeichen vom Anfang und Ende eines Strings zu entfernen.
someString.replace (/(^")|("$)/g, '')
Mit Guava können Sie eleganter schreiben CharMatcher.is('\"').trimFrom(mystring);
Zuerst prüfen wir, ob der String doppelt in Anführungszeichen gesetzt ist, und entfernen ihn gegebenenfalls. Sie können die Bedingung überspringen, wenn Sie tatsächlich wissen, dass sie doppelt in Anführungszeichen steht.
if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
string = string.substring(1, string.length() - 1);
}
In Kotlin können Sie verwenden String.removeSurrounding verwenden (Trennzeichen: CharSequence)
Z.B
string.removeSurrounding("\"")
Entfernt die angegebene Trennzeichenfolge sowohl vom Anfang als auch vom Ende dieser Zeichenfolge genau dann, wenn sie mit dem Trennzeichen beginnt und mit diesem endet . Andernfalls wird diese Zeichenfolge unverändert zurückgegeben.
Der Quellcode sieht folgendermaßen aus:
public fun String.removeSurrounding(delimiter: CharSequence): String = removeSurrounding(delimiter, delimiter)
public fun String.removeSurrounding(prefix: CharSequence, suffix: CharSequence): String {
if ((length >= prefix.length + suffix.length) && startsWith(prefix) && endsWith(suffix)) {
return substring(prefix.length, length - suffix.length)
}
return this
}
removeSurrounding()
Methode , die ich oben geteilt habe, sah für mich so aus, dass sie für jeden Java-Entwickler leicht verständlich sein könnte.
Ändern Sie die Antwort von @ brcolow ein wenig
if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
string = string.substring(1, string.length() - 1);
}
@NonNull
sollte und wahrscheinlich etwas Ähnliches enthalten sollte Objects.requireNonNull(string)
, denn wenn jemand stripQuotes (null) aufruft, tut er dies wahrscheinlich versehentlich!
Scala
s.stripPrefix("\"").stripSuffix("\"")
Dies funktioniert unabhängig davon, ob die Zeichenfolge am Anfang und / oder am Ende Anführungszeichen enthält oder nicht.
Edit: Sorry, nur Scala
Bearbeitet: Ich habe gerade festgestellt, dass ich angeben sollte, dass dies nur funktioniert, wenn beide vorhanden sind. Andernfalls wird die Zeichenfolge nicht als Anführungszeichen betrachtet. Ein solches Szenario erschien mir bei der Arbeit mit CSV-Dateien.
org.apache.commons.lang3.StringUtils.unwrap("\"abc\"", "\"") = "abc"
org.apache.commons.lang3.StringUtils.unwrap("\"abc", "\"") = "\"abc"
org.apache.commons.lang3.StringUtils.unwrap("abc\"", "\"") = "abc\""
private static String removeQuotesFromStartAndEndOfString(String inputStr) {
String result = inputStr;
int firstQuote = inputStr.indexOf('\"');
int lastQuote = result.lastIndexOf('\"');
int strLength = inputStr.length();
if (firstQuote == 0 && lastQuote == strLength - 1) {
result = result.substring(1, strLength - 1);
}
return result;
}
Um ein oder mehrere doppelte Anführungszeichen am Anfang und Ende eines Strings in Java zu entfernen, müssen Sie eine Regex-basierte Lösung verwenden:
String result = input_str.replaceAll("^\"+|\"+$", "");
Wenn Sie auch einfache Anführungszeichen entfernen müssen:
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
HINWEIS : Wenn Ihre Zeichenfolge "
Inside enthält , kann dieser Ansatz zu Problemen führen (z. B. "Name": "John"
=>Name": "John
. ).
Sehen Sie hier eine Java-Demo :
String input_str = "\"'some string'\"";
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
System.out.println(result); // => some string