Frage

Ich habe in den Hafen einige C # -Code zu Java und ich ein paar Probleme habe einen String Splitting Befehl umgewandelt wird.

Während die eigentliche Regex immer noch korrekt ist, wenn Aufspaltung in C # das regex-Tokens ist Teil des resultierenden String [], aber in Java das regex-Tokens entfernt werden.

Was ist der einfachste Weg, um die Split-on-Token zu halten?

Hier ist ein Beispiel für C # Code, der die Art und Weise funktioniert ich es will:

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
War es hilfreich?

Lösung

Ich weiß nicht, wie C # tut es, aber es in Java zu erreichen, werden Sie es annähern müssen. Schauen Sie, wie diesem Code Funktion:

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

Andere Tipps

Das ist, weil Sie den Split-Token aufnimmst. C # nimmt dies als Hinweis, dass Sie das Token selbst als Mitglied des resultierenden Array behalten wollen. Java unterstützt dies nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top