tôi cần phải chia chuỗi có chứa biểu thức toán học cơ bản, chẳng hạn như:
"(a+b)*c"
hoặc
" (a - c)/d"
Các delimiters là + - * /() và không gian và tôi cần họ như một dấu hiệu độc lập. Về cơ bản kết quả sẽ giống như thế này:Làm cách nào tôi có thể sử dụng chuỗi # split để tách một chuỗi với dấu phân cách + - * /() và dấu cách và giữ chúng dưới dạng mã thông báo bổ sung?
"("
"a"
"+"
"b"
")"
"*"
"c"
Và đối với ví dụ thứ hai:
" "
"("
"a"
" "
"-"
...
Tôi đọc rất nhiều câu hỏi về vấn đề tương tự với delimiters ít phức tạp và câu trả lời phổ biến là sử dụng không gian lookahead tích cực và - phía sau.
Như thế này: (?<=X | ?=X)
Và X đại diện cho delimiters, nhưng đặt chúng trong một lớp học như thế này:
[\\Q+-*()\\E/\\s]
không hoạt động theo cách mong muốn.
Vì vậy, làm thế nào để tôi phải định dạng các dấu phân cách để làm cho công việc chia làm thế nào tôi cần nó?
--- Cập nhật ---
Ký tự lớp từ và kết hợp dài hơn không được chia nhỏ.
Chẳng hạn như "ab" "c1" hoặc "12".
Hoặc trong ngắn hạn, tôi cần kết quả tương tự như StringTokenizer sẽ có, cung cấp các tham số "- + * /()" và đúng.
http://stackoverflow.com/questions/2226863/whats-a-good-library-for-parsing-mathematical-expressions-in-java – Zutty
Làm thế nào để 'a + ab-c1 + 12' được tách ra? Có 'ab' một mã thông báo hoặc tập hợp' a * b' và kết quả cho phần này phải là 'a'' * '' b'? Các số có thể có trong chuỗi của bạn không? – Pshemo
"ab" nên ở lại "ab" cũng như "c1" và "12" –