Réponses:
Vous pouvez utiliser String#replaceAll()
avec un modèle de ^\"|\"$
pour cela.
Par exemple
string = string.replaceAll("^\"|\"$", "");
Pour en savoir plus sur les expressions régulières, rendez-vous sur http://regular-expression.info .
Cela dit, cela sent un peu que vous essayez d'inventer un analyseur CSV. Si tel est le cas, je suggérerais de rechercher les bibliothèques existantes, telles que OpenCSV .
String#indexOf()
, String#substring()
, les méthodes et ainsi de suite. C'est juste un peu plus rapide, mais c'est beaucoup plus de code. @GK: Euh, avez-vous lu / compris l'expression régulière ou même l'avez-vous testée?
^\"|\"$
. |
signifie "ou". Il correspondra donc à ^\"
ou \"$
. ^
correspond au début de la chaîne et $
correspond à la fin de la chaîne. ^\"
signifie correspondre à un guillemet au début de la chaîne et \"$
correspond à un guillemet à la fin de la chaîne.
Pour supprimer le premier et le dernier caractère de la chaîne, utilisez:
myString = myString.substring(1, myString.length()-1);
Aussi avec 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"
Alors,
final String SchrodingersQuotedString = "may or may not be quoted";
StringUtils.strip(SchrodingersQuotedString, "\""); //quoted no more
Cette méthode fonctionne à la fois avec des chaînes entre guillemets et sans guillemets, comme indiqué dans mon exemple. Le seul inconvénient est, il ne sera pas strictement appariés citations, seulement avant et arrière des guillemets (ie. Pas de distinction entre "partially
et les "fully"
chaînes entre guillemets).
Si les guillemets doubles n'existent qu'au début et à la fin, un code simple car cela fonctionnerait parfaitement:
string = string.replace("\"", "");
C'est le meilleur moyen que j'ai trouvé, pour supprimer les guillemets doubles du début et de la fin d'une chaîne.
someString.replace (/(^")|("$)/g, '')
En utilisant Guava, vous pouvez écrire plus élégamment CharMatcher.is('\"').trimFrom(mystring);
Tout d'abord, nous vérifions si la chaîne est doublée entre guillemets et, le cas échéant, supprimons-les. Vous pouvez ignorer le conditionnel si en fait vous savez qu'il est entre guillemets.
if (string.length() >= 2 && string.charAt(0) == '"' && string.charAt(string.length() - 1) == '"')
{
string = string.substring(1, string.length() - 1);
}
Dans Kotlin, vous pouvez utiliser String.removeSurrounding (délimiteur: CharSequence)
Par exemple
string.removeSurrounding("\"")
Supprime la chaîne de délimitation donnée du début et de la fin de cette chaîne si et seulement si elle commence par et se termine par le délimiteur . Sinon, renvoie cette chaîne inchangée.
Le code source ressemble à ceci:
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()
méthode que j'ai partagée ci-dessus me semblait facilement compréhensible par n'importe quel développeur Java.
Modifier un peu la réponse de @ brcolow
if (string != null && string.length() >= 2 && string.startsWith("\"") && string.endsWith("\"") {
string = string.substring(1, string.length() - 1);
}
@NonNull
et qu'il devrait probablement avoir quelque chose comme à l' Objects.requireNonNull(string)
intérieur parce que si quelqu'un appelle stripQuotes (null), il le fait probablement par erreur!
Scala
s.stripPrefix("\"").stripSuffix("\"")
Cela fonctionne indépendamment du fait que la chaîne ait ou non des guillemets au début et / ou à la fin.
Edit: Désolé, Scala uniquement
Edité: Je viens de réaliser que je devrais préciser que cela ne fonctionne que si les deux existent. Sinon, la chaîne n'est pas considérée comme entre guillemets. Un tel scénario m'est apparu lorsque je travaillais avec des fichiers 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;
}
Pour supprimer un ou plusieurs guillemets doubles du début et de la fin d'une chaîne en Java, vous devez utiliser une solution basée sur les regex:
String result = input_str.replaceAll("^\"+|\"+$", "");
Si vous devez également supprimer les guillemets simples:
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
REMARQUE : si votre chaîne contient à l' "
intérieur, cette approche peut entraîner des problèmes (par exemple "Name": "John"
=>Name": "John
).
Voir une démo Java ici :
String input_str = "\"'some string'\"";
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
System.out.println(result); // => some string