Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#正则表达式拆分为Java模式拆分_C#_Java_Regex_Split - Fatal编程技术网

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

C#正则表达式拆分为Java模式拆分,c#,java,regex,split,C#,Java,Regex,Split,我必须将一些C#代码移植到Java,并且在转换字符串拆分命令时遇到了一些问题 虽然实际的正则表达式仍然正确,但在C#中拆分时,正则表达式标记是结果字符串[]的一部分,但在Java中,正则表达式标记被删除 保持代币分割的最简单方法是什么 下面是一个C#代码的示例,其工作方式符合我的要求: using System; using System.Text.RegularExpressions; class Program { static void Main() {

我必须将一些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不支持这一点。

我不知道C是如何做到的,但要在Java中实现它,必须对其进行近似计算。看看它是如何做到的:

公共字符串[]拆分(字符串文本){
if(text==null){
text=“”;
}
int last_match=0;
LinkedList splitted=新建LinkedList();
Matcher m=this.pattern.Matcher(文本);
//迭代每个匹配
while(m.find()){
//上次匹配后的文本
拆分的.add(text.substring(最后一个匹配,m.start());
//分隔符本身
if(此.keep_分隔符){
拆分。添加(m.group());
}
最后一次匹配=m.end();
}
//尾随文本
拆分的.add(text.substring(last_match));
返回splitted.toArray(新字符串[splitted.size()]);
}

你能给我们举一个你的输入和你用来分割的正则表达式的例子吗?一般来说,我确信在字符类(方括号,“[]”)中,你不需要太多反斜杠。其他人可以确认吗?我可能不需要反斜杠,但我没有编写正则表达式,我只是移植代码;使用System.Text.RegularExpressions;类程序{static void Main(){String[]values=Regex.Split(“5+10”,“@”([\+\-*()\^\\/]))”;foreach(值中的字符串值)控制台。WriteLine(值);}
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()]);
}