演算子とオペランドを含む方程式があります。私はそれを分割し、演算子とオペランドを次のように 1 つの文字列配列に抽出したいと考えています。
4+3 -2 + 1* 5 -2
4,+,-,2,+,1,*,5,-,2
これに対して推奨される正規表現パターンはありますか?
演算子とオペランドを含む方程式があります。私はそれを分割し、演算子とオペランドを次のように 1 つの文字列配列に抽出したいと考えています。
4+3 -2 + 1* 5 -2
4,+,-,2,+,1,*,5,-,2
これに対して推奨される正規表現パターンはありますか?
これは正規表現で行う方法です。これらはあまり使用していないため、改善できる可能性があります。
Pattern pattern = Pattern.compile("[0-9]+|(\\+|-|\\*)");
Matcher matcher = pattern.matcher("4+3 -2 + 1* 5 -2");
List<String> parts = new ArrayList<>();
while (matcher.find()) {
parts.add(matcher.group());
}
String[] array = parts.toArray(new String[parts.size()]);
System.out.println(Arrays.toString(array));
出力:
[4, +, 3, -, 2, +, 1, *, 5, -, 2]
あなたがやろうとしていることは、トークン化と呼ばれます。これには正規表現は必要ありません。を使用できるはずですStringTokenizer
。この他の SO 投稿の答えは、あなたのニーズに合うはずです: String Tokenizer in Java。
アップデート
元の提案はニーズに合っているはずですが、StringTokenizer
クラスは非推奨に近づいているようです。
javadoc から:
StringTokenizer は、新しいコードでの使用は推奨されていませんが、互換性のために保持されているレガシー クラスです。この機能が必要な場合は、代わりに String の split メソッドまたは java.util.regex パッケージを使用することをお勧めします。
とにかく使いたいならオプションです。