¿No crees que reemplazará todas las apariciones de comillas dobles con una cadena vacía en lugar de la primera y la última.
GuruKulki
1
@ufk: Esta no es una expresión regular compleja. De lo contrario, puede que desee sin problemas con un montón de String#indexOf(), String#substring(), métodos y así sucesivamente. Es solo un poco más rápido, pero es mucho más código. @ GK: Uh, ¿leíste / entendiste la expresión regular o incluso la probaste?
BalusC
11
@GK el cursor representa el comienzo de la cadena buscada y el signo de dólar representa su final. La barra invertida aquí "escapa" a la siguiente cita, por lo que se trata solo como un personaje. Entonces, esta expresión regular dice, reemplace todas las apariciones de comillas al comienzo, o comillas al final, con la cadena vacía. Tal como lo solicitó.
Carl Manaster
2
@Marc: No estoy seguro de cómo es un problema teniendo en cuenta la pregunta en su forma actual.
BalusC
8
Aquí es la expresión regular desglosado: ^\"|\"$. |significa "o". Por lo tanto, coincidirá con ^\"o \"$. ^coincide con el inicio de la cadena y $coincide con el final de la cadena. ^\"significa hacer coincidir una cita al comienzo de la cadena y hacer \"$coincidir una cita al final de la cadena.
ibizaman el
31
Para eliminar el primer carácter y el último carácter de la cadena, use:
finalStringSchrodingersQuotedString="may or may not be quoted";StringUtils.strip(SchrodingersQuotedString,"\"");//quoted no more
Este método funciona tanto con cadenas entre comillas como sin comillas, como se muestra en mi ejemplo. El único inconveniente es que no buscará estrictamente coincidentes cotizaciones, sólo el ataque y de salida comillas (es decir. No distingue entre "partiallyy "fully"cadenas entre comillas).
¿Es posible recortar solo un carácter? Por ejemplo, si mi cadena termina con dos comillas simples, solo quiero recortarlas.
vatsal mevada
10
Primero, verificamos si la Cadena se duplica entre comillas, y si es así, las eliminamos. Puede omitir el condicional si, de hecho, sabe que está entre comillas dobles.
Elimina la cadena de delimitador dada tanto desde el inicio como hasta el final de esta cadena si y solo si comienza 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)}returnthis}
Hay cientos de otros lenguajes de programación. ¿Por qué proporcionó la respuesta para Kotlin y no para otros :-)?
nickolay.laptev
1
Buena pregunta @ nickolay.laptev! :) Solía escribir java y me mudé a kotlin y, como soy desarrollador de Android, pensé que podría tener otros desarrolladores en la misma posición, por lo que esto también podría ser útil para ellos. Además, removeSurrounding()me pareció que el método que compartí anteriormente podría ser fácilmente comprensible por cualquier desarrollador de Java.
Ryan Amaral
1
¡Esta única respuesta ilustra todo el punto de adoptar Kotlin en su base de código Java existente!
Kirill Groshkov
3
El siguiente patrón, cuando se usa con java.util.regex.Matcher, coincidirá con cualquier cadena entre comillas dobles sin afectar la aparición de comillas dobles dentro de la cadena:
¡Pensaría que el argumento del método debería estar anotado @NonNully probablemente debería tener algo así Objects.requireNonNull(string)dentro de él porque si alguien llama stripQuotes (nulo), probablemente lo esté haciendo por error!
brcolow
2
Scala
s.stripPrefix("\"").stripSuffix("\"")
Esto funciona independientemente de si la cadena tiene o no comillas al principio y / o al final.
Editado: Acabo de darme cuenta de que debo especificar que esto funciona solo si ambos existen. De lo contrario, la cadena no se considera entre comillas. Tal escenario apareció para mí cuando trabajaba con archivos CSV.
Respuestas:
Puede usar
String#replaceAll()
con un patrón de^\"|\"$
para esto.P.ej
Para obtener más información sobre las expresiones regulares, consulte también http://regular-expression.info .
Dicho esto, esto huele un poco a que estás tratando de inventar un analizador CSV. Si es así, sugeriría buscar bibliotecas existentes, como OpenCSV .
fuente
String#indexOf()
,String#substring()
, métodos y así sucesivamente. Es solo un poco más rápido, pero es mucho más código. @ GK: Uh, ¿leíste / entendiste la expresión regular o incluso la probaste?^\"|\"$
.|
significa "o". Por lo tanto, coincidirá con^\"
o\"$
.^
coincide con el inicio de la cadena y$
coincide con el final de la cadena.^\"
significa hacer coincidir una cita al comienzo de la cadena y hacer\"$
coincidir una cita al final de la cadena.Para eliminar el primer carácter y el último carácter de la cadena, use:
fuente
También con Apache
StringUtils.strip()
:Entonces,
Este método funciona tanto con cadenas entre comillas como sin comillas, como se muestra en mi ejemplo. El único inconveniente es que no buscará estrictamente coincidentes cotizaciones, sólo el ataque y de salida comillas (es decir. No distingue entre
"partially
y"fully"
cadenas entre comillas).fuente
Si las comillas dobles solo existen al principio y al final, un código simple como este funcionaría perfectamente:
string = string.replace("\"", "");
fuente
Esta es la mejor manera que encontré, para quitar comillas dobles desde el principio y el final de una cadena.
fuente
Usando guayaba puedes escribir más elegantemente
CharMatcher.is('\"').trimFrom(mystring);
fuente
Primero, verificamos si la Cadena se duplica entre comillas, y si es así, las eliminamos. Puede omitir el condicional si, de hecho, sabe que está entre comillas dobles.
fuente
Kotlin
En Kotlin puedes usar String.removeSurrounding (delimitador: CharSequence)
P.ej
El código fuente se ve así:
fuente
removeSurrounding()
me pareció que el método que compartí anteriormente podría ser fácilmente comprensible por cualquier desarrollador de Java.El siguiente patrón, cuando se usa con
java.util.regex.Matcher
, coincidirá con cualquier cadena entre comillas dobles sin afectar la aparición de comillas dobles dentro de la cadena:fuente
Modificando un poco la respuesta de @ brcolow
fuente
@NonNull
y probablemente debería tener algo asíObjects.requireNonNull(string)
dentro de él porque si alguien llama stripQuotes (nulo), probablemente lo esté haciendo por error!Scala
Esto funciona independientemente de si la cadena tiene o no comillas al principio y / o al final.
Editar: Lo siento, solo Scala
fuente
Editado: Acabo de darme cuenta de que debo especificar que esto funciona solo si ambos existen. De lo contrario, la cadena no se considera entre comillas. Tal escenario apareció para mí cuando trabajaba con archivos CSV.
fuente
fuente
fuente
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:
Si necesita eliminar también comillas simples:
NOTA : Si su cadena contiene
"
adentro, este enfoque puede generar problemas (por ejemplo,"Name": "John"
=>Name": "John
).Vea una demostración de Java aquí :
fuente
encuentre índices de cada comilla doble e inserte una cadena vacía allí.
fuente