Reemplazar todo () reemplaza la subcadena incorrecta

Tengo una ArrayList de cadenas que necesito modificar. Cuando los agrego a la lista se ven así.

tick.add("CAST.ST");
tick.add("ELUX-B.ST");
tick.add("EKTA-B.ST");

Luego tengo un método para modificar los nombres para eliminar ".ST" y agregar ".XML"

private static void addFileNames(List<String> ticks, List<File> fileNames)
    {
        List<String> tick = new ArrayList<String>();
        for(int i=0; i<ticks.size(); i++)
            {
            tick.add(ticks.get(i).replaceAll(".ST", ".xml"));

            }
        for(int i=0; i<tick.size(); i++)
        {
            File f = new File("XML/" + tick.get(i));
            fileNames.add(f);

        }

Esto funciona perfectamente para todas las cadenas excepto "CAST.ST", que se modifica a "C.xml.xml". También probé replaceFirst y luego reemplaza la subcadena "AST" a "C.xml.ST".

¿Alguien puede ver lo que estoy haciendo mal aquí?

Respuesta 1

El problema es . representa cualquier personaje en una expresión regular. Escapar del punto con "\ .ST".

Respuesta: 2

replaceAll () acepta una expresión RegEx como primer argumento.

¿Por qué no solo usas replace (". ST", ".xml") ya que solo quieres reemplazar un valor de tu valor original?

No es necesario usar Regex para esta respuesta

Respuesta: 3

Descubrí que podemos leer el código fuente del software de un archivo JAR usando el software de descompilación. Descargué dicho software y leí muchos de esos códigos. Mis preguntas son ... ¿Cómo podemos prevenir ...

Estoy realmente confundido acerca de cuáles son exactamente las diferencias entre el elemento Kth más pequeño y el elemento Kth. Kth element = kth element es un array = array [k-1] pero, ¿cuál es el kth elemento más pequeño? Tengo un ...

Intentando escribir este script que funciona con entradas que a menudo llegan a cientos de miles de millones. Sin embargo, Math.ceil no se redondeará hacia arriba? int clayturns = (int) Math.ceil (clayneeded / 7500000000L); ...

Usando Solr 3.6.1, tengo este campo en mi schema.xml: <field name = "names" type = "text_general" indexed = "true" warehouse = "false" multiValued = "true" /> <dynamicField name = " nombres_ * "tipo =" ...