質問

JavaにC#コードを移植する必要があり、文字列分割コマンドの変換に問題があります。

実際の正規表現は依然として正しいですが、C#で分割すると、正規表現トークンは結果のstring []の一部になりますが、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
役に立ちましたか?

解決

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

他のヒント

これは、スプリットトークンをキャプチャしているためです。 C#は、これを、結果の配列のメンバーとしてトークン自体を保持したいというヒントとして受け取ります。 Javaはこれをサポートしていません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top