2017-10-19 31 views
1

J'essaie de diviser une équation de chaîne en deux tableaux: nombres et opérateurs.Java: Division de l'équation de chaîne en nombres et opérateurs

String expr = "3/20.0"; 

String[] numbers = expr.split("[+-/\\*]"); 
String[] operators = expr.split("[^+-/\\*]+"); 

System.out.println(Arrays.toString(numbers)); 
System.out.println(Arrays.toString(operators)); 

Mais mon code imprime: [3, 20, 0] [, /, .]

Mais je suis en train de se [3, 20.0] [, /]

Je ne sais pas pourquoi la virgule est en face du tableau des opérateurs, mais surtout je veux juste 20.0 pour être un élément dans le tableau de nombres et garder les points décimaux hors de mon tableau d'opérateurs.

+0

de FWIW: '+ - /' dans la classe de caractères ne signifie pas « + ou - ou/"cela signifie tout caractère _entre_ + et /. Lequel en ASCII est l'ensemble "+, -. /". (C'est pourquoi il correspond au ".") Si vous voulez mettre un - dans une classe de caractères, mettez-le à la fin. –

Répondre

1

Les virgules ne font que vous montrer la partition d'éléments. Ce [, signifie que le premier élément est vide.

Essayez ces premières regex

Pour les numéros, répartis sur [^\d.]+
Pour les opérateurs, répartis sur [\d.]+

Et, je ne sais pas si Java peut supprimer des éléments divisé vides, mais vous » d voulez
faire un processus de post-vérification si vous le pouvez.


Split Notes -
[\d.]+ est une classe qui correspond généralement à des nombres, par exemple. 'dd.dd' (feuilles opérateurs)
[^\d.]+ est l'inverse où elle correspond à des opérateurs (numéros feuilles)

+0

Wow, ça marche! Pouvez-vous m'expliquer ce que chacun signifie? – softboy

+0

@softboy - Ok, j'ai essayé d'ajouter quelques notes .. – sln