web-dev-qa-db-fra.com

Comment puis-je couper le début et la fin des guillemets doubles d'une chaîne?

Je voudrais couper une citation double (") début et fin d'une chaîne.
Comment puis-je obtenir cela en Java? Merci!

118
ufk

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 .

222
BalusC

Pour supprimer le premier caractère et le dernier caractère de la chaîne, utilisez:

myString = myString.substring(1, myString.length()-1);
29
Michael Myers

En utilisant Guava, vous pouvez écrire plus élégamment CharMatcher.is('\"').trimFrom(mystring);

11
legrass

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, '')
11
Yaniv Levi

Si les guillemets doubles n'existent qu'au début et à la fin, un code simple comme celui-ci fonctionnerait parfaitement:

string = string.replace("\"", "");

10
sunraincyq

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).

8
rath

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);
}
8
brcolow

Kotlin

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
}
5
Ryan Amaral
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;
}
2
m0untp

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}]*[^\"]"
2
Alex F

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

2
Brendan Maguire

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
1
Wiktor Stribiżew

É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\""
0
raisercostin
Matcher m = Pattern.compile("^\"(.*)\"$").matcher(value);
String strUnquoted = value;
if (m.find()) {
    strUnquoted = m.group(1);
}
0
Ravikiran

trouver des index de chaque guillemets et y insérer une chaîne vide.

0
GuruKulki

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);
}
0
Confused