¿Cómo puedo recortar comillas dobles iniciales y finales de una cadena?

Me gustaría recortar una comilla doble inicial (“) de una cadena.
¿Cómo puedo lograr eso en Java? ¡Gracias!

Puede usar String#replaceAll() con un patrón de ^\"|\"$ para esto.

P.ej

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

Para obtener más información sobre expresiones regulares, tenga acceso a http://regular-expression.info .

Dicho esto, huele un poco a que estás tratando de inventar un analizador de CSV. Si es así, sugeriría buscar bibliotecas existentes, como OpenCSV .

Para eliminar el primer carácter y el último carácter de la cadena, use:

 myString = myString.substring(1, myString.length()-1); 

Usando Guava puedes escribir de forma más elegante CharMatcher.is('\"').trimFrom(mystring);

Esta es la mejor manera que encontré, para quitar comillas dobles desde el principio y el final de una cadena.

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

Si las comillas dobles solo existen al principio y al final, un código simple como este funcionaría perfectamente:

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

Primero, verificamos si el String está duplicado y, de ser así, elimínalos. Puede omitir el condicional si, de hecho, sabe que tiene una cita doble.

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

También 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" 

Asi que,

 final String SchrodingersQuotedString = "may or may not be quoted"; StringUtils.strip(SchrodingersQuotedString, "\""); //quoted no more 

Este método funciona tanto con cadenas entrecomilladas como sin comillas, como se muestra en mi ejemplo. El único inconveniente es que no buscará citas estrictamente coincidentes , solo caracteres iniciales y finales (es decir, sin distinción entre cadenas "fully" citadas "fully" y "fully" entrecomilladas "fully" ).

 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; } 

El siguiente patrón, cuando se utiliza con java.util.regex.Matcher , coincidirá con cualquier cadena entre comillas dobles sin afectar las apariciones de comillas dobles dentro de la cadena:

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

Para eliminar una o más comillas dobles del inicio y el final de una cadena en Java, debe usar una solución basada en expresiones regulares:

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

Si necesita eliminar también comillas simples:

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

NOTA : Si su cadena contiene " adentro " , este enfoque puede generar problemas (por ejemplo, "Name": "John" => Name": "John ).

Vea una demostración de Java aquí :

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

encuentre los índices de cada comilla doble e inserte una cadena vacía allí.

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

s.stripPrefix("\"").stripSuffix("\"")

Esto funciona independientemente de si la cadena tiene o no comillas al principio y / o al final.

Editar: Lo siento, solo Scala

Kotlin

En Kotlin puedes usar String.removeSurrounding (delimitador: CharSequence)

P.ej

 string.removeSurrounding("\"") 

Elimina la cadena delimitadora dada tanto del inicio como del final de esta cadena si y solo si comienza con y termina con el delimitador . De lo contrario, devuelve esta cadena sin cambios.

El código fuente se ve así:

 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 }