Dividir una cadena usando delimitadores-Java

Tengo una cadena y me gustaría dividir los valores por separado.

Por ejemplo, me gustaría dividir la siguiente cadena:

            Test1 Avg. running Time: 66,3 [ms], (Ref: 424.0) ===> Well done, It is 80% faster

Quisiera 66,3[ms] por separado y el valor Ref por separado.

Sería útil si alguno de ustedes pudiera sugerirme cuál será la mejor manera de hacer esto.

¿Debo usar un delimitador (:)? Pero en este caso, recibo la salida como

            66,3 [ms], (Ref: 424.0) ===> Well done, It is 80% faster 

¿O debería usar una 'regex'?

preguntado el 31 de julio de 12 a las 13:07

4 Respuestas

Para este caso puedes usar .split(", "); porque ',' tiene un espacio en blanco después, excepto en el número.

Echa un vistazo también en esta publicación para analizador listo para usar.

contestado el 23 de mayo de 17 a las 11:05

Si nos separamos de ", " el resultado es: Test1 Avg. running Time: 66,3 [ms], (Ref: 424.0) ===> Well done y It is 80% faster. ¡Esto requiere un poco más de trabajo para obtener valores! - gelatinas

Entonces puedes usar str.substring(str.index(":") + 1, str.index("[")).trim(), en la primera división, y str.substring(str.index(":") +1, str.index(")")).trim(), en el segundo. - cl-r

Puedes usar split() función...

String s = "66,3 [ms], (Ref: 424.0) ===> Well done, It is 80% faster";

String[] arr = s.split(", ");

Respondido 31 Jul 12, 13:07

usar de esta manera

public class JavaStringSplitExample {

    public static void main(String args[]) {

        String str = "one-two-three";
        String[] temp;

        String delimiter = "-";

        temp = str.split(delimiter);

        for (int i = 0; i < temp.length; i++)
            System.out.println(temp[i]);

        /*
         * NOTE : Some special characters need to be escaped while providing
         * them as delimiters like "." and "|".
         */

        System.out.println("");
        str = "one.two.three";
        delimiter = "\\.";
        temp = str.split(delimiter);
        for (int i = 0; i < temp.length; i++)
            System.out.println(temp[i]);

        /*
         * Using second argument in the String.split() method, we can control
         * the maximum number of substrings generated by splitting a string.
         */

        System.out.println("");
        temp = str.split(delimiter, 2);
        for (int i = 0; i < temp.length; i++)
            System.out.println(temp[i]);

    }

}

Respondido 31 Jul 12, 13:07

Puedes probar esta expresión regular:

    String test = "Test1 Avg. running Time: 66,3 [ms], (Ref: 424.0) ===> Well done, It is 80% faster"; 
    Pattern p = Pattern.compile("(\\d+[.,]?\\d+)");
    Matcher m = p.matcher(test);
    m.find();
    String avgRunningTime = m.group(1);
    m.find();
    String ref = m.group(1);
    System.out.println("avgRunningTime: "+avgRunningTime+", ref: "+ref);

Esto imprimiría:

    avgRunningTime: 66,3, ref: 424.0

Naturalmente, querrá agregar alguna verificación de errores (por ejemplo, verificar si m.find() devoluciones true).

Respondido 31 Jul 12, 14:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.