Question

Je dois porter du code C # sur Java et je ne parviens pas à convertir une commande de fractionnement de chaîne.

Bien que l'expression régulière soit toujours correcte, lors du fractionnement en C #, les jetons d'expression régulière font partie de la chaîne résultante [], mais en Java, les jetons d'expression régulière sont supprimés.

Quel est le moyen le plus simple de conserver les jetons dédoublés?

Voici un exemple de code C # qui fonctionne comme je le veux:

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
Était-ce utile?

La solution

Je ne sais pas comment C # le fait, mais pour le faire en Java, vous devrez vous en approcher. Regardez comment ce code le fait:

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()]);
}

Autres conseils

Cela est dû au fait que vous capturez le jeton fractionné. C # prend cela comme une indication que vous souhaitez conserver le jeton lui-même en tant que membre du tableau résultant. Java ne le supporte pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top