Sebagai bagian dari proyek untuk sekolah, saya perlu mengganti string dari formulir:
5 * x^3 - 6 * x^1 + 1
menjadi sesuatu seperti:
5x<sup>3</sup> - 6x<sup>1</sup> + 1
Saya yakin ini bisa dilakukan dengan ekspresi reguler, tetapi saya belum tahu bagaimana melakukannya.
Bisakah Anda membantu saya?
PS Tugas sebenarnya adalah untuk mengimplementasikan aplikasi Java Pemrosesan Polinomial, dan saya menggunakan ini untuk meneruskan polynomial.toString () dari model ke tampilan, dan saya ingin menampilkannya menggunakan tag html dengan cara yang cantik.
Jawaban:
sumber
sumber
replaceAll
metode ini secara implisit melakukannyaPattern.compile(regex).matcher(testString).replaceAll(regexReplacementString)
! Jadi, jika Anda menggunakan kembali pola dengan cara ini, objek yang berlebihan akan dihindari. Lebih lanjut, seperti yang dikatakan @MarcelValdezOrozco, menjadikannya statis akan mencegah pemanggilan kompilasi pola yang tidak perlu. :)sumber
harap dicatat bahwa menggabungkan kedua pengganti dalam satu regex / pengganti akan menjadi pilihan yang buruk karena ekspresi yang lebih umum seperti
x^3 - 6 * x
akan gagal.sumber
sumber
Jika ini untuk ekspresi matematika umum dan ekspresi tanda kurung diperbolehkan, akan sangat sulit (mungkin tidak mungkin) untuk melakukan ini dengan ekspresi reguler.
Jika satu-satunya penggantinya adalah yang Anda tunjukkan, itu tidak sulit dilakukan. Pertama strip keluar
*
, kemudian gunakan pengambilan seperti yang ditunjukkan Can Berk Güder untuk menangani^
itu.sumber
Apa polinomial Anda? Jika Anda "memproses", saya membayangkan semacam pohon sub-ekspresi yang dihasilkan di beberapa titik, dan akan berpikir bahwa akan lebih mudah menggunakannya untuk menghasilkan string Anda daripada mengurai ulang mentah ekspresi dengan regex.
Hanya melemparkan cara berpikir yang berbeda di luar sana. Saya tidak yakin apa lagi yang terjadi di aplikasi Anda.
sumber
Coba ini:
Pastikan untuk mengimpor java.util.regex.
sumber
sumber
Anda akan ingin melihat menangkap dalam ekspresi reguler untuk menangani pembungkusan 3 dalam ^ 3.
sumber
Coba ini, mungkin bukan cara terbaik. tetapi berhasil
sumber
Lihatlah antlr4. Ini akan membawa Anda lebih jauh dalam membuat struktur pohon daripada ekspresi reguler saja.
https://github.com/antlr/grammars-v4/tree/master/calculator (calculator.g4 berisi tata bahasa yang Anda butuhkan)
Singkatnya, Anda menentukan tata bahasa untuk mengurai ekspresi, menggunakan antlr untuk menghasilkan kode java, dan menambahkan callback untuk menangani evaluasi saat pohon sedang dibuat.
sumber