C # Regex Split To Java Pattern fractionné
Question
Je dois porter du code C # sur Java et je ne parviens pas à convertir une commande de fractionnement de chaîne.
Bien que l'expression régulière soit toujours correcte, lors du fractionnement en C #, les jetons d'expression régulière font partie de la chaîne résultante [], mais en Java, les jetons d'expression régulière sont supprimés.
Quel est le moyen le plus simple de conserver les jetons dédoublés?
Voici un exemple de code C # qui fonctionne comme je le veux:
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
La solution
Je ne sais pas comment C # le fait, mais pour le faire en Java, vous devrez vous en approcher. Regardez comment ce code le fait:
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()]);
}
Autres conseils
Cela est dû au fait que vous capturez le jeton fractionné. C # prend cela comme une indication que vous souhaitez conserver le jeton lui-même en tant que membre du tableau résultant. Java ne le supporte pas.