Tôi có một chuỗi có chứa chữ số và chữ cái. Tôi muốn chia chuỗi thành các số liên tiếp của các chữ số và các khối chữ liền nhau.Trợ giúp về cách tốt hơn để phân tích cú pháp chữ số từ một Chuỗi trong Java
Xem xét chuỗi "34A312O5M444123A".
Tôi muốn đầu ra: [ "34", "A", "312", "O", "5", "M", "444.123", "A"]
Tôi có mã hoạt động và trông giống như:
List<String> digitsAsElements(String str){
StringBuilder digitCollector = new StringBuilder();
List<String> output = new ArrayList<String>();
for (int i = 0; i < str.length(); i++){
char cChar = str.charAt(i);
if (Character.isDigit(cChar))
digitCollector.append(cChar);
else{
output.add(digitCollector.toString());
output.add(""+cChar);
digitCollector = new StringBuilder();
}
}
return output;
}
Tôi coi chia tách hai lần để lấy một mảng chứa tất cả các khối số và một mảng chứa tất cả các khối chữ cái. Sau đó hợp nhất các kết quả. Tôi né tránh điều này vì nó sẽ gây hại cho khả năng đọc.
Tôi đã cố ý tránh giải quyết vấn đề này với mẫu regex khi tôi tìm thấy các mẫu regex là trở ngại chính cho khả năng đọc.
- Trình gỡ rối không xử lý tốt.
- Chúng làm gián đoạn luồng người đọc mã nguồn.
- Thời gian làm việc của regex phát triển hữu cơ và trở thành quái vật.
- Chúng vô cùng trực quan.
Câu hỏi của tôi là:
- Làm sao để cải thiện khả năng đọc mã trên?
- Có cách nào tốt hơn để thực hiện việc này không? Một lớp Util giải quyết vấn đề này một cách thanh lịch.
- Bạn vẽ đường thẳng giữa việc sử dụng regEx và viết mã gì tương tự với những gì tôi đã viết ở trên?
- Làm cách nào để tăng khả năng đọc/bảo trì của regExes?
Lưu ý rằng mã của bạn như được viết biến chuỗi thành "[34, A, 312, O, 5, M,, N,, I, 444123, A]", đó không phải là những gì bạn nói bạn đang mong đợi . Tôi sẽ đăng mã đã sửa, nhưng Johannes Rössel đánh tôi với một câu trả lời tốt hơn. –
từ, bắt tốt. –