C#正则表达式拆分为Java模式拆分
我必须将一些C#代码移植到Java,并且在转换字符串拆分命令时遇到了一些问题 虽然实际的正则表达式仍然正确,但在C#中拆分时,正则表达式标记是结果字符串[]的一部分,但在Java中,正则表达式标记被删除 保持代币分割的最简单方法是什么 下面是一个C#代码的示例,其工作方式符合我的要求: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() {
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()]);
}