C#Regex Split to Java Pattern split
質問
JavaにC#コードを移植する必要があり、文字列分割コマンドの変換に問題があります。
実際の正規表現は依然として正しいですが、C#で分割すると、正規表現トークンは結果のstring []の一部になりますが、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でそれを実現するには、近似する必要があります。 このコードの仕組みをご覧ください。
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()]);
}
他のヒント
これは、スプリットトークンをキャプチャしているためです。 C#は、これを、結果の配列のメンバーとしてトークン自体を保持したいというヒントとして受け取ります。 Javaはこれをサポートしていません。
所属していません StackOverflow