java - espacio - La cadena de valores de moneda se divide por comas
split string java delimiter (2)
Tengo una cadena que contiene valores de moneda formateados como 45,890.00
y múltiples valores separados por comas como 45,890.00,12,345.00,23,765.34,56,908.50
.
Quiero extraer y procesar todos los valores de moneda, pero no pude encontrar la expresión regular correcta para esto, esto es lo que he intentado
public static void main(String[] args) {
String currencyValues = "45,890.00,12,345.00,23,765.34,56,908.50";
String regEx = "//.[0-9]{2}[,]";
String[] results = currencyValues.split(regEx);
//System.out.println(Arrays.toString(results));
for(String res : results) {
System.out.println(res);
}
}
El resultado de esto es:
45,890 //removing the decimals as the reg ex is exclusive
12,345
23,765
56,908.50
¿Podría alguien ayudarme con esto?
También podría usar una expresión regular diferente para que coincida con el patrón que está buscando (entonces realmente no importa lo que es el separador):
String currencyValues = "45,890.00,12,345.00,23,765.34,56,908.50,55.00,345,432.00";
Pattern pattern = Pattern.compile("(//d{1,3},)?//d{1,3}//.//d{2}");
Matcher m = pattern.matcher(currencyValues);
while (m.find()) {
System.out.println(m.group());
}
huellas dactilares
45,890.00
12,345.00
23,765.34
56,908.50
55.00
345,432.00
Explicación de la expresión regular:
-
//d
coincide con un dígito -
//d{1,3}
coincide con 1-3 dígitos -
(//d{1,3},)?
opcionalmente coincide con 1-3 dígitos seguido de una coma. -
//.
coincide con un punto -
//d{2}
coincide con 2 dígitos.
Sin embargo, también diría que tener una coma como separador probablemente no sea el mejor diseño y probablemente genere confusión.
EDITAR:
Como señala @tobias_k: //d{1,3}(,//d{3})*//.//d{2}
sería una mejor expresión regular, ya que coincidiría correctamente:
- 1,000,000,000.00
y no coincidirá incorrectamente:
- 1,00.00
Necesita un "look behind" regex (?<=regex)
, que coincida, pero que consuma:
String regEx = "(?<=//.[0-9]{2}),";
Aquí está su caso de prueba que está funcionando:
public static void main(String[] args) {
String currencyValues = "45,890.00,12,345.00,23,765.34,56,908.50";
String regEx = "(?<=//.[0-9]{2}),"; // Using the regex with the look-behind
String[] results = currencyValues.split(regEx);
for (String res : results) {
System.out.println(res);
}
}
Salida:
45,890.00
12,345.00
23,765.34
56,908.50