我必须将一些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
有帮助吗?

解决方案

我不知道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