-1

これまでのところ、空白を分割して削除し、演算子で分割するが演算子を保持して同じ配列に挿入することにより、この正規表現を使用して文字列を文字列配列に分割しました。

tokens = rpn.split("(?<=\\s) |(?=\\s) |(?>\\s+) |(?<=[-+*/()])|(?=[-+*/()])|(?>=[-+*/()])");

E.g. input 2 3 + OR 2 3+;
     output a[0]=2;a[1]=3;a[2]=+

これは、RPN 電卓がすべての空白を削除し、数字と演算子を分離するためのものです。

上記の正規表現は、数値と演算子を分割するように機能しe.g. 3+ into 3 + but if I have 2 3 + 、出力は次のようになりますtokens[0]=2; tokens[1]=3;tokens[2]="";tokens[3]=+;

この正規表現の問題を解決するのを手伝ってください。

4

3 に答える 3

0

これは私のために働いた:

tokens = rpn.replaceAll("(?=\\p{Punct})|(?<=\\p{Punct})", " ").split("\\s+");

これにより、句読点の周りにスペースが追加され、その空白で分割されます。\\p{Punct}必要に応じて、例のように、より具体的な句読点のセットに置き換えることができ[-+*/()]ます。

于 2013-04-30T13:00:15.163 に答える
0

分割....次の正規表現で試しました:

\s*(?=[^0-9.]+)\s*

次の文字が数字ではない任意のポイントで分割します (小数点あり)。数値が負になる可能性があるかどうかについては、おそらく賢くする必要があります (いずれにせよ、データ形式に変更が必要になります)。

編集:perlでテストしました...

于 2013-04-30T12:05:42.290 に答える