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

Je voudrais couper un début et une fin de guillemet (“) à partir d’une chaîne.
Comment puis-je y arriver en Java? Merci!

Vous pouvez utiliser Ssortingng#replaceAll() avec un motif de ^\"|\"$ pour cela.

Par exemple

 ssortingng = ssortingng.replaceAll("^\"|\"$", ""); 

Pour en savoir plus sur les expressions régulières, consultez le site http://regular-expression.info .

Cela dit, cela sent un peu comme si vous essayiez d’inventer un parsingur CSV. Si tel est le cas, je suggère de rechercher des bibliothèques existantes, telles que OpenCSV .

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

 mySsortingng = mySsortingng.subssortingng(1, mySsortingng.length()-1); 

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

C’est le meilleur moyen que j’ai trouvé, pour supprimer les guillemets du début et de la fin d’une chaîne.

 someSsortingng.replace (/(^")|("$)/g, '') 

Si les guillemets n’existent qu’au début et à la fin, un code simple comme cela fonctionnerait parfaitement:

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

Tout d’abord, nous vérifions si la chaîne est doublée et, si oui, supprimez-les. Vous pouvez ignorer le conditionnel si vous savez qu’il est entre guillemets doubles.

 if (ssortingng.length() >= 2 && ssortingng.charAt(0) == '"' && ssortingng.charAt(ssortingng.length() - 1) == '"') { ssortingng = ssortingng.subssortingng(1, ssortingng.length() - 1); } 

Aussi avec Apache SsortingngUtils.ssortingp() :

  SsortingngUtils.ssortingp(null, *) = null SsortingngUtils.ssortingp("", *) = "" SsortingngUtils.ssortingp("abc", null) = "abc" SsortingngUtils.ssortingp(" abc", null) = "abc" SsortingngUtils.ssortingp("abc ", null) = "abc" SsortingngUtils.ssortingp(" abc ", null) = "abc" SsortingngUtils.ssortingp(" abcyx", "xyz") = " abc" 

Alors,

 final Ssortingng SchrodingersQuotedSsortingng = "may or may not be quoted"; SsortingngUtils.ssortingp(SchrodingersQuotedSsortingng, "\""); //quoted no more 

Cette méthode fonctionne à la fois avec des chaînes entre guillemets et sans guillemets, comme illustré dans mon exemple. Le seul inconvénient est qu’il ne recherchera pas des guillemets ssortingctement concordants , mais uniquement des guillemets de début et de fin (c.-à-d. Aucune distinction entre les chaînes entre guillemets "partially "fully" et "fully" ).

 private static Ssortingng removeQuotesFromStartAndEndOfSsortingng(Ssortingng inputStr) { Ssortingng result = inputStr; int firstQuote = inputStr.indexOf('\"'); int lastQuote = result.lastIndexOf('\"'); int strLength = inputStr.length(); if (firstQuote == 0 && lastQuote == strLength - 1) { result = result.subssortingng(1, strLength - 1); } return result; } 

Le modèle ci-dessous, utilisé avec java.util.regex.Matcher , correspondra à n’importe quelle chaîne entre guillemets sans affecter les occurrences de guillemets à l’intérieur de la chaîne:

 "[^\"][\\p{Print}]*[^\"]" 

Pour supprimer un ou plusieurs guillemets au début et à la fin d’une chaîne en Java, vous devez utiliser une solution basée sur les regex:

 Ssortingng result = input_str.replaceAll("^\"+|\"+$", ""); 

Si vous devez également supprimer des guillemets simples:

 Ssortingng result = input_str.replaceAll("^[\"']+|[\"']+$", ""); 

REMARQUE : Si votre chaîne contient " inside " , cette approche peut entraîner des problèmes (par exemple, "Name": "John" => Name": "John ).

Voir une démo Java ici :

 Ssortingng input_str = "\"'some ssortingng'\""; Ssortingng result = input_str.replaceAll("^[\"']+|[\"']+$", ""); System.out.println(result); // => some ssortingng 

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

 Matcher m = Pattern.comstack("^\"(.*)\"$").matcher(value); Ssortingng strUnquoted = value; if (m.find()) { strUnquoted = m.group(1); } 

s.ssortingpPrefix("\"").ssortingpSuffix("\"")

Cela fonctionne que la chaîne ait ou non des guillemets au début et / ou à la fin.

Edit: Désolé, Scala seulement

Kotlin

Dans Kotlin, vous pouvez utiliser Ssortingng.removeSurrounding (délimiteur: CharSequence)

Par exemple

 ssortingng.removeSurrounding("\"") 

Supprime la chaîne de délimiteur 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 sans modification.

Le code source ressemble à ceci:

 public fun Ssortingng.removeSurrounding(delimiter: CharSequence): Ssortingng = removeSurrounding(delimiter, delimiter) public fun Ssortingng.removeSurrounding(prefix: CharSequence, suffix: CharSequence): Ssortingng { if ((length >= prefix.length + suffix.length) && startsWith(prefix) && endsWith(suffix)) { return subssortingng(prefix.length, length - suffix.length) } return this }