Tôi tự hỏi nếu ai đó có thể giúp tôi tìm ra cách để phân tích một chuỗi có định dạng sau:Phân tích một chuỗi chứa ký tự thoát sử dụng Java
;field1-field2-fieldN;field1-field2-fieldN;
Mỗi bản ghi được giới hạn bởi ';' và mỗi trường trong một bản ghi được giới hạn bởi '-'. Biến chứng là các trường riêng lẻ có thể chứa các ký tự dấu phân cách thoát như vậy "\;" hoặc là "-". Điều này làm cho mã phân tích cú pháp đơn giản của tôi bên dưới thất bại. Vì vậy, những gì tôi đang cố gắng để làm là đến với biểu thức regex sẽ phù hợp với delimiters nhưng không phù hợp với delimiters thoát. kiến thức regex của tôi không phải là tuyệt vời nhưng tôi mong đợi phải có một cách để kết hợp "([^ \;])" và "([;])" để có được những gì tôi yêu cầu.
public static List<ParsedRecord> parse(String data) {
List<ParsedRecord> parsedRecords = new List<ParsedRecord>();
String[] records = data.split(";");
for (String record : records) {
String[] fields = data.split("-");
parsedRecords.add(new parsedRecord(fields));
}
return parsedRecords;
}
Cảm ơn rất nhiều trước.
Cảm ơn! Tôi đã sử dụng kết hợp câu trả lời của bạn và Jon để làm cho trình phân tích cú pháp hoạt động. Nhiều đánh giá cao! –
Điều này không hoàn toàn đúng ... regex được xác định ở trên sẽ có ký tự trước dấu phân tách bị tước bỏ. Vì vậy, "hello, thế giới" trở thành [địa ngục, thế giới]. Cách tốt hơn là sử dụng cái nhìn tiêu cực đằng sau cơ chế trong regex: http://stackoverflow.com/questions/820172/how-to-split-a-comma-separated-string-while-ignoring-escaped-commas – Alvin