我必须将一些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
答案 0 :(得分:1)
这是因为您正在捕获拆分令牌。 C#将此作为提示,您希望将令牌本身保留为结果数组的成员。 Java不支持这一点。
答案 1 :(得分: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()]);
}