【问题标题】:C# Regex Split To Java Pattern splitC# 正则表达式拆分为 Java 模式拆分
【发布时间】:2010-11-03 10:16:27
【问题描述】:

我必须将一些 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 regex split


【解决方案1】:

我不知道 C# 是如何做到的,但要在 Java 中完成它,你必须近似它。看看this code是怎么做到的:

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

【讨论】:

    【解决方案2】:

    这是因为您正在捕获拆分令牌。 C# 将此作为您希望将令牌本身保留为结果数组的成员的提示。 Java 不支持这个。

    【讨论】:

    • 尝试以下操作:使用系统;使用 System.Text.RegularExpressions;类程序 { static void Main() { String[] values = Regex.Split("5+10", @"([\+\-*()\^\\/])"); foreach(值中的字符串值) Console.WriteLine(value); } }
    猜你喜欢
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多