C # Regex Split To Java Pattern split - PullRequest
1 голос
/ 16 июня 2009

Мне нужно перенести некоторый код C # на Java, и у меня возникли проблемы с преобразованием команды разделения строки.

Хотя фактическое регулярное выражение все еще верно, при разбиении в C # токены регулярного выражения являются частью получающейся строки [], но в Java токены регулярного выражения удаляются.

Какой самый простой способ сохранить разделенные токены?

Вот пример кода C #, который работает так, как я хочу:

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

Ответы [ 2 ]

1 голос
/ 16 июня 2009

Я не знаю, как это делает C #, но чтобы сделать это на Java, вам придется приблизиться к нему. Посмотрите, как этот код делает это:

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()]);
}
1 голос
/ 16 июня 2009

Это потому, что вы захватываете разделенный токен. C # воспринимает это как подсказку о том, что вы хотите сохранить сам токен в качестве члена результирующего массива. Java не поддерживает это.

...