C# 正则表达式拆分为 Java 模式拆分

Posted

技术标签:

【中文标题】C# 正则表达式拆分为 Java 模式拆分【英文标题】:C# Regex Split To Java Pattern split 【发布时间】: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

【问题讨论】:

你能给我们举个例子来说明你的输入和你用来分割的正则表达式吗? 作为一般说明,我很确定在字符类(方括号,“[]”)中,您不需要那么多反斜杠。其他人可以确认吗? 我可能不需要反斜杠,但我没有写正则表达式,我只是在移植代码。 【参考方案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);

以上是关于C# 正则表达式拆分为 Java 模式拆分的主要内容,如果未能解决你的问题,请参考以下文章

通过正则表达式拆分字符串[重复]

在正则表达式 c# 中拆分字符串

C# 正则表达式拆分但如果拆分失败则包含空字符串

C# 正则表达式拆分引号和逗号语法错误 [重复]

正则表达式拆分并合并为单个记录

通过定义标题的正则表达式拆分 Markdown 文本文件