2012-03-06 12 views
11

Supongamos que me gustaría eliminar todos " que rodean una cadena. En Python, yo lo haría:Java equivalente para str.strip de Python()

>>> s='"Don\'t need the quotes"' 
>>> print s 
"Don't need the quotes" 
>>> print s.strip('"') 
Don't need the quotes 

Y si quiero eliminar varios caracteres, p. " y los paréntesis:

>> s='"(Don\'t need quotes and parens)"' 
>>> print s 
"(Don't need quotes and parens)" 
>>> print s.strip('"()') 
Don't need quotes and parens 

¿Cuál es la manera elegante de despojar a una cadena en Java?

+0

La clase String tiene un método de reemplazo(). Debería adaptarse a tus necesidades. – wuppi

+0

[Ver aquí] (http://stackoverflow.com/a/2088900/593709) es una discusión detallada. –

Respuesta

9

Supongamos que me gustaría eliminar todo " que rodea una cadena

El equivalente más cercano al código Python es:

s = s.replaceAll("^\"+", "").replaceAll("\"+$", ""); 

Y si quiero eliminar varios caracteres, p.ej " y los paréntesis:

s = s.replaceAll("^[\"()]+", "").replaceAll("[\"()]+$", ""); 

Si puede utilizar Apache Commons Lang, hay StringUtils.strip().

+0

+1 Para manejar varios caracteres según lo solicitado. Sin embargo, crea dos cadenas nuevas. –

+1

@ AdamMatan: creo que el método preferido es 'StringUtils.strip()' de Common Lang. Consulte mi respuesta actualizada. – NPE

0

Esto reemplaza " y () al principio y al final de una cadena

String str = "\"te\"st\""; 
str = str.replaceAll("^[\"\\(]+|[\"\\)]+$", ""); 
1

En Java, se puede hacer como:

s = s.replaceAll("\"",""),replaceAll("'","") 

Además, si sólo desea reemplazar "Inicio" y "Fin", puede hacer algo como:

s = s.replace("^'", "").replace("'$", "").replace("^\"", "").replace("\"$", ""); 

O si simplemente:

s = s.replaceAll("^\"|\"$", "").replaceAll("^'|'$", ""); 
+0

ha modificado mi respuesta en consecuencia ... !! –

+0

¿No sería una pérdida de tiempo crear dos cadenas nuevas en lugar de una? –

+0

Tenga en cuenta que las cadenas son "inmutables", por lo que no es suficiente simplemente hacer '' 's.replace ("\" "," ")' ''. Debe reasignar la variable 's' a la cadena resultante '. –

0

probar esto:

new String newS = s.replaceAll("\"", ""); 

sustituir la doble cita con una cadena sin carácter.

6

La biblioteca Guava tiene una útil utilidad para ello. La biblioteca contiene CharMatcher.trimFrom(), que hace lo que quiere. Solo necesita crear un CharMatcher que coincida con los caracteres que desea eliminar.

Código:

CharMatcher matcher = CharMatcher.is('"'); 
System.out.println(matcher.trimFrom(s)); 

CharMatcher matcher2 = CharMatcher.anyOf("\"()"); 
System.out.println(matcher2.trimFrom(s)); 

Internamente, esto no crea ninguna nueva cadena, pero sólo llama s.subSequence(). Como tampoco necesita Regexps, supongo que es la solución más rápida (y seguramente la más limpia y fácil de entender).