especiales espacio caracteres blanco java string-split

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