Pregunta

Tengo que portar algún código C # a Java y tengo problemas para convertir un comando de división de cadenas.

Si bien la expresión regular real sigue siendo correcta, cuando se dividen en C #, los tokens de expresión regular forman parte de la cadena resultante [], pero en Java se eliminan los tokens de expresión regular.

¿Cuál es la forma más fácil de mantener los tokens divididos?

Aquí hay un ejemplo de código C # que funciona de la manera que lo quiero:

using System;

using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        String[] values = Regex.Split("5+10", @"([\+\-\*\(\)\^\\/])");

        foreach (String value in values)
            Console.WriteLine(value);
    }
}

Produces:
5
+
10
¿Fue útil?

Solución

No sé cómo lo hace C #, pero para lograrlo en Java, tendrás que aproximarlo. Mire cómo este código :

public String[] split(String text) {
    if (text == null) {
        text = "";
    }

    int last_match = 0;
    LinkedList<String> splitted = new LinkedList<String>();

    Matcher m = this.pattern.matcher(text);

    // Iterate trough each match
    while (m.find()) {
        // Text since last match
        splitted.add(text.substring(last_match,m.start()));

        // The delimiter itself
        if (this.keep_delimiters) {
            splitted.add(m.group());
        }

        last_match = m.end();
    }
    // Trailing text
    splitted.add(text.substring(last_match));

    return splitted.toArray(new String[splitted.size()]);
}

Otros consejos

Esto se debe a que está capturando el token dividido. C # toma esto como una sugerencia de que desea conservar el token como miembro de la matriz resultante. Java no es compatible con esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top