Je voudrais couper une citation double (") début et fin d'une chaîne.
Comment puis-je obtenir cela en Java? Merci!
Vous pouvez utiliser String#replaceAll()
avec un motif de ^\"|\"$
pour ça.
Par exemple.
string = string.replaceAll("^\"|\"$", "");
Pour en savoir plus sur les expressions régulières, veuillez vous adresser à http://normale-expression.info .
Cela dit, ça sent un peu comme si vous essayez d’inventer un analyseur syntaxique au format CSV. Si tel est le cas, je vous conseillerais de rechercher les bibliothèques existantes, telles que OpenCSV .
Pour supprimer le premier caractère et le dernier caractère de la chaîne, utilisez:
myString = myString.substring(1, myString.length()-1);
En utilisant Guava, vous pouvez écrire plus élégamment CharMatcher.is('\"').trimFrom(mystring);
C’est la meilleure façon que j’ai trouvée de supprimer les guillemets du début et de la fin d’une chaîne.
someString.replace (/(^")|("$)/g, '')
Si les guillemets doubles n'existent qu'au début et à la fin, un code simple comme celui-ci fonctionnerait parfaitement:
string = string.replace("\"", "");
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 entre guillemets, comme indiqué dans mon exemple. Le seul inconvénient est, il ne cherchera pas strictement apparié guillemets, seuls les caractères de guillemet fin et (c.-à-d. Aucune distinction entre "partially
et "fully"
chaînes entre guillemets).
Premièrement, 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 cité deux fois.
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 du délimiteur du début et de la fin de cette chaîne si et seulement si elle commence par et se termine par délimiteur . Sinon, cette chaîne est restée 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
}
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;
}
Le modèle ci-dessous, lorsqu'il est utilisé avec Java.util.regex.Matcher
, correspondra à toute chaîne entre guillemets doubles sans affecter les occurrences de guillemets doubles à l'intérieur de la chaîne:
"[^\"][\\p{Print}]*[^\"]"
s.stripPrefix("\"").stripSuffix("\"")
Cela fonctionne que la chaîne ait ou non des guillemets au début et/ou à la fin.
Edit: Sorry, Scala seulement
Pour supprimer un ou plusieurs guillemets doubles au début et à la fin d'une chaîne en Java, vous devez utiliser une solution basée sur les expressions rationnelles:
String result = input_str.replaceAll("^\"+|\"+$", "");
Si vous devez également supprimer les guillemets simples:
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
[~ # ~] note [~ # ~] : Si votre chaîne contient "
à l’intérieur, cette approche peut entraîner des problèmes (par exemple, "Name": "John"
=> Name": "John
).
Voir un démo Java ici :
String input_str = "\"'some string'\"";
String result = input_str.replaceAll("^[\"']+|[\"']+$", "");
System.out.println(result); // => some string
Édité: Je viens de me rendre compte que je devrais préciser que cela ne fonctionne que si les deux existent. Sinon, la chaîne n'est pas considérée entre guillemets. Un tel scénario est apparu pour moi lorsque les 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\""
Matcher m = Pattern.compile("^\"(.*)\"$").matcher(value);
String strUnquoted = value;
if (m.find()) {
strUnquoted = m.group(1);
}
trouver des index de chaque guillemets et y insérer une chaîne vide.
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);
}