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 模式拆分的主要内容,如果未能解决你的问题,请参考以下文章