Đây là phiên bản của riêng tôi, dọn dẹp từ http://pastebin.com/aZngu65y (được đăng trong nhận xét). Nó có thể quản lý Unicode. Nó sẽ dọn dẹp tất cả các khoảng trống quá mức (ngay cả trong báo giá) - điều này có thể tốt hay xấu tùy thuộc vào nhu cầu. Không hỗ trợ cho báo giá thoát.
private static String[] parse(String param) {
String[] output;
param = param.replaceAll("\"", " \" ").trim();
String[] fragments = param.split("\\s+");
int curr = 0;
boolean matched = fragments[curr].matches("[^\"]*");
if (matched) curr++;
for (int i = 1; i < fragments.length; i++) {
if (!matched)
fragments[curr] = fragments[curr] + " " + fragments[i];
if (!fragments[curr].matches("(\"[^\"]*\"|[^\"]*)"))
matched = false;
else {
matched = true;
if (fragments[curr].matches("\"[^\"]*\""))
fragments[curr] = fragments[curr].substring(1, fragments[curr].length() - 1).trim();
if (fragments[curr].length() != 0)
curr++;
if (i + 1 < fragments.length)
fragments[curr] = fragments[i + 1];
}
}
if (matched) {
return Arrays.copyOf(fragments, curr);
}
return null; // Parameter failure (double-quotes do not match up properly).
}
mẫu đầu vào để so sánh:
"sdfskjf" sdfjkhsd "hfrif ehref" "fksdfj sdkfj fkdsjf" sdf sfssd
asjdhj sdf ffhj "fdsf fsdjh"
日本語 中文 "Tiếng Việt" "English"
dsfsd
sdf " s dfs fsd f " sd f fs df fdssf "日本語 中文"
"" "" ""
" sdfsfds " "f fsdf
(2 dòng là trống rỗng, dòng thứ 3 là không gian, dòng cuối cùng là bị thay đổi). Hãy đánh giá với kết quả mong đợi của riêng bạn, vì nó có thể thay đổi, nhưng đường cơ sở là, trường hợp thứ nhất nên trả về [sdfskjf, sdfjkhsd, hfrif ehref, fksdfj sdkfj fkdsjf, sdf, sfssd].
Bạn có thể cần phân tách các chuỗi được trích dẫn đầu tiên, sau đó chia phần còn lại của chuỗi theo khoảng trắng. Phải có một số câu hỏi xung quanh ở đây về cách thực hiện bước đầu tiên. Bước thứ hai là tầm thường. – jahroy
Và bạn đã thử những gì? –
Một thư viện phân tích cú pháp CSV phong nha sẽ hoạt động tốt cho bạn. Hầu hết sẽ cho phép lựa chọn dấu phân cách và sẽ tôn trọng và tránh tách văn bản được trích dẫn. –