C # Regex Split Um Java-Muster Split
Frage
Ich habe in den Hafen einige C # -Code zu Java und ich ein paar Probleme habe einen String Splitting Befehl umgewandelt wird.
Während die eigentliche Regex immer noch korrekt ist, wenn Aufspaltung in C # das regex-Tokens ist Teil des resultierenden String [], aber in Java das regex-Tokens entfernt werden.
Was ist der einfachste Weg, um die Split-on-Token zu halten?
Hier ist ein Beispiel für C # Code, der die Art und Weise funktioniert ich es will:
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
Lösung
Ich weiß nicht, wie C # tut es, aber es in Java zu erreichen, werden Sie es annähern müssen. Schauen Sie, wie diesem Code Funktion:
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()]);
}
Andere Tipps
Das ist, weil Sie den Split-Token aufnimmst. C # nimmt dies als Hinweis, dass Sie das Token selbst als Mitglied des resultierenden Array behalten wollen. Java unterstützt dies nicht.