2010-12-13 12 views
9

Quiero eliminar todos los siguientes caracteres de mi cadena¿Cómo se quita algunos personajes de mi cadena

"> [], -"

en el momento que estoy haciendo esto. pero debe haber una manera más eficiente

newString = myString.replace(">","").replace("[","").replace("]","").... 
+0

Bueno, se podría utilizar expresiones regulares, pero entonces tendría que escapar caracteres especiales. ¿Y de qué tipo de eficiencia estás hablando? Tiempo de ejecución o tuyo (es decir, líneas de código)? –

+0

Preocuparse por la "eficiencia" de este problema en particular indica una optimización prematura; Dudo mucho que * este * método sea el cuello de botella de su aplicación. Por favor, tómese su tiempo para descubrir dónde está * realmente * lenta su aplicación y necesita optimización. – Bombe

Respuesta

9

utilizar una expresión regular que describe todos los caracteres que desea reemplazar, con el método que reemplaza todo lo que coincide con el regex:

newString = myString.replaceAll("[<>\\[\\],-]", ""); 

(Editado: No creo <> se supone que son escapado, en realidad . y se me olvidó para doblar las barras invertidas ya que va a ser interpretadas en dos ocasiones:. una vez por el compilador de Java, y otra vez por el motor de expresiones regulares)

+0

funciona como un encanto. Gracias. – code511788465541441

+0

¿Qué sucede si quiero mantener nuevas líneas? – Mann

1
newString = myString.replaceAll("[>\\[\\],-]", ""); 

Las barras invertidas son para escapar de la '[' debido a que el primer argumento es en realidad una expresión regular.

+0

Muéstremelo, +1 –

+0

no funciona – code511788465541441

+0

Uhh ... va a querer envolver esos caracteres en una clase de caracteres ('[]') porque está buscando alguno de ellos por su cuenta, no una secuencia de todos ellos en una fila ... –

0

Puede recorrer cada carácter, anexándolos uno a uno a un StringBuilder() a menos que coincidan con uno de los caracteres que está eliminando.

Pero no estoy seguro de que sea mucho más rápido.

1
newString = myString.replaceAll("[>\\[\\],-]", ""); 
+0

tipo de funciona pero está eliminando mucho más de lo que quiero. eliminó casi todos los datos – code511788465541441

+0

@ user521180: lo editó un poco, intente una vez más. ¿Puede darnos una muestra de datos si todavía no funciona de la manera que quería? – darioo

2

Utilizando los métodos replaceAll reemplazar/provoca un nuevo patrón de compilarse cada vez. Entonces, si está haciendo esto varias veces, le sugiero encarecidamente que recorra los caracteres o que cree una sola expresión regular para usar repetidamente.

+0

No recorra los caracteres usted mismo; pero haga "create the regex" (una nueva instancia de 'Pattern', en Java) si esto es importante. Consulte el documento de Java para java.util.regex.Pattern, que también proporciona una descripción general básica de la sintaxis de expresiones regulares compatible con el motor de expresiones regulares de Java. –

2

Performace-wise más eficiente: sí. No puede "eliminar" caracteres de una Cadena, por lo que no debe crear una nueva de todos modos. Considere una solución basada en switch/case:

StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < s.length(); i++) { 
    switch(s.getCharAt(i)) { 
    case '>': 
    case '[': 
    case ']': 
    case ',': 
    case '-': break; 
    default: sb.append(s.getCharAt(i)); 
    } 
} 
s = sb.toString(); 
+0

¡Buena solución para este problema! – Rahul

6

Usted puede utilizar el método de la clase StringreplaceAll.

Puede formar una clase de caracteres que consta de los caracteres que desea eliminar. Y la cadena de reemplazo estará vacía, cadena "".

Pero los caracteres que desea eliminar que pondrá en la clase de caracteres podrían ser metacaracteres de expresiones regulares y, por lo tanto, deben escaparse. Puedes escaparte manualmente como muestran muchas respuestas, o puedes usar el método Pattern.quote().

String charToDel = ">[],-"; 
String pat = "[" + Pattern.quote(charToDel) + "]"; 
String str = "a>b[c]d,e-f"; 
str = str.replaceAll(pat,""); 

See it

Cuestiones relacionadas