Tôi đang viết trình giả lập cho một máy có mã vạch 'printf' và trong khi tôi biết lớp Formatter có thể đủ tốt để định dạng chuỗi, tôi cần một cách để đếm số đối số được tiêu thụ bởi cuộc gọi printf.Có thư viện Java nào để phân tích chuỗi định dạng printf không?
Tắt đầu, tôi có thể làm điều gì đó với một regex để đếm số '%', nhưng tôi không quá quen thuộc với chuỗi định dạng, vì vậy tôi có thể không đếm đúng ... (trừ những người đã thoát, vv)
chỉnh sửa: Tôi thực sự cần số tham số, cùng với ánh xạ tham số # đến loại tham số, ví dụ: "hello% s% +. 3i" sẽ cho {0 - > string, 1 -> Integer}
bạn đang tìm kiếm thứ gì đó phân tích cú pháp chuỗi định dạng hợp lệ cho lớp Trình định dạng hay các chuỗi định dạng hợp lệ cho C printf? (ví dụ: hỗ trợ '% * s' hoặc'% *. * f' chuỗi nhận 2 hoặc 3 đối số, vì vậy bạn không thể chỉ đếm số% s) –
các loại đối số duy nhất áp dụng trong trường hợp của tôi là ký tự , Số nguyên được ký 32 bit, số tăng gấp đôi 64 bit và chuỗi bị hủy null. Nếu không nó sẽ hoạt động như c printf, vì vậy tôi đoán Formatter là không chính xác, nhưng nó có lẽ sẽ làm việc cho mục đích của tôi, như đầu vào là đến từ một trình biên dịch tôi đã viết anyway. – Bwmat
Hmm. Nếu bạn đã viết một trình biên dịch, bạn không thể viết một trình phân tích ngữ pháp đơn giản (tương đối) cho bất kỳ biến thể 'printf()' nào bạn muốn hỗ trợ, và sử dụng cây cú pháp trừu tượng để tạo số đối số? nhiều công việc hơn là một cuộc gọi thư viện đơn giản, nhưng nếu bạn có các công cụ như ANTLR hoặc bất cứ điều gì để làm phân tích cú pháp, tôi nghĩ nó sẽ không khó, và bạn có thể đảm bảo chương trình của bạn hoạt động chính xác. Lý do duy nhất tôi đưa ra điều này là phân tích cú pháp printf đầy đủ không phải là dễ dàng như vậy. Nếu bạn có thể sống mà không có cú pháp chiều rộng biến, đơn giản hóa nó một chút, và bạn có thể làm điều đó với Regex –