C # Regex Split To Java Pattern split
Pregunta
Tengo que portar algún código C # a Java y tengo problemas para convertir un comando de división de cadenas.
Si bien la expresión regular real sigue siendo correcta, cuando se dividen en C #, los tokens de expresión regular forman parte de la cadena resultante [], pero en Java se eliminan los tokens de expresión regular.
¿Cuál es la forma más fácil de mantener los tokens divididos?
Aquí hay un ejemplo de código C # que funciona de la manera que lo quiero:
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
Solución
No sé cómo lo hace C #, pero para lograrlo en Java, tendrás que aproximarlo. Mire cómo este código :
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()]);
}
Otros consejos
Esto se debe a que está capturando el token dividido. C # toma esto como una sugerencia de que desea conservar el token como miembro de la matriz resultante. Java no es compatible con esto.