Risposte:
È possibile utilizzare String#replaceAll()
con un modello di ^\"|\"$
per questo.
Per esempio
string = string.replaceAll("^\"|\"$", "");
Per ulteriori informazioni sulle espressioni regolari, consultare http://regular-expression.info .
Detto questo, questo puzza un po 'come se stessi cercando di inventare un parser CSV. In tal caso, suggerirei di cercare le librerie esistenti, come OpenCSV .
String#indexOf()
, String#substring()
, metodi e così via. È solo un po 'più veloce, ma è molto più codice. @GK: Uh, hai letto / capito il regex o addirittura lo hai provato?
^\"|\"$
. |
significa "o". Quindi corrisponderà a ^\"
o \"$
. ^
corrisponde all'inizio della stringa e $
corrisponde alla fine della stringa. ^\"
significa abbinare una virgoletta all'inizio della stringa e abbinare una virgoletta alla \"$
fine della stringa.
Per rimuovere il primo carattere e l'ultimo carattere dalla stringa, utilizzare:
myString = myString.substring(1, myString.length()-1);
Anche con 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"
Così,
final String SchrodingersQuotedString = "may or may not be quoted";
StringUtils.strip(SchrodingersQuotedString, "\""); //quoted no more
Questo metodo funziona con stringhe tra virgolette e non quotate come mostrato nel mio esempio. L'unico aspetto negativo è che non cercherà le virgolette strettamente abbinate , ma solo i caratteri delle virgolette iniziali e finali (ovvero nessuna distinzione tra stringhe tra virgolette "partially
e "fully"
stringhe).
Se le doppie virgolette esistono solo all'inizio e alla fine, un semplice codice come questo funzionerebbe perfettamente:
string = string.replace("\"", "");
Questo è il modo migliore che ho trovato per eliminare le doppie virgolette dall'inizio e dalla fine di una stringa.
someString.replace (/(^")|("$)/g, '')
Usando Guava puoi scrivere in modo più elegante CharMatcher.is('\"').trimFrom(mystring);
Innanzitutto, controlliamo se la stringa è raddoppiata tra virgolette e, in tal caso, rimuoverla. Puoi saltare il condizionale se in realtà sai che è tra virgolette doppie.
if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
string = string.substring(1, string.length() - 1);
}
In Kotlin puoi usare String.removeSurrounding (delimitatore: CharSequence)
Per esempio
string.removeSurrounding("\"")
Rimuove la stringa del delimitatore specificata sia dall'inizio che dalla fine di questa stringa se e solo se inizia con e termina con il delimitatore . Altrimenti restituisce questa stringa invariata.
Il codice sorgente è simile al seguente:
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()
metodo che ho condiviso sopra mi sembrava che potesse essere facilmente comprensibile da qualsiasi sviluppatore Java.
Modificando un po 'la risposta di @ brcolow
if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
string = string.substring(1, string.length() - 1);
}
@NonNull
e probabilmente dovrebbe avere qualcosa di simile Objects.requireNonNull(string)
al suo interno perché se qualcuno sta chiamando stripQuotes (null) probabilmente lo stanno facendo per errore!
Scala
s.stripPrefix("\"").stripSuffix("\"")
Funziona indipendentemente dal fatto che la stringa abbia o meno virgolette all'inizio e / o alla fine.
Modifica: scusate, solo Scala
A cura: ho appena capito che dovrei specificare che funziona solo se esistono entrambi. Altrimenti la stringa non viene considerata quotata. Tale scenario mi è apparso quando ho lavorato con file CSV.
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;
}
Per rimuovere una o più virgolette dall'inizio e dalla fine di una stringa in Java, è necessario utilizzare una soluzione basata su regex:
String result = input_str.replaceAll("^\"+|\"+$", "");
Se è necessario rimuovere anche virgolette singole:
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
NOTA : se la stringa contiene "
all'interno, questo approccio potrebbe causare problemi (ad es. "Name": "John"
=>Name": "John
).
Guarda una demo Java qui :
String input_str = "\"'some string'\"";
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
System.out.println(result); // => some string
trova gli indici di ogni virgoletta doppia e inserisci una stringa vuota lì.