Hãy bắt đầu bằng cách loại bỏ StringTokenizer
. Nó đang già đi và thậm chí không hỗ trợ các biểu thức thông thường. Tài liệu của nó nêu:
StringTokenizer
là một lớp kế thừa được giữ lại vì lý do tương thích mặc dù việc sử dụng nó không được khuyến khích trong mã mới. Chúng tôi khuyên mọi người tìm kiếm chức năng này nên sử dụngsplit
phương pháp String
hoặc java.util.regex
gói.
Vì vậy, hãy ném nó ra ngay lập tức. Những chiếc lá đósplit()
và Scanner
. Sự khác biệt giữa chúng là gì?
Đối với một điều, split()
chỉ cần trả về một mảng, giúp dễ dàng sử dụng vòng lặp foreach:
for (String token : input.split("\\s+") { ... }
Scanner
được xây dựng giống như một luồng:
while (myScanner.hasNext()) {
String token = myScanner.next();
...
}
hoặc là
while (myScanner.hasNextDouble()) {
double token = myScanner.nextDouble();
...
}
(Nó có một API lớn , vì vậy đừng nghĩ rằng nó luôn bị hạn chế ở những thứ đơn giản như vậy.)
Giao diện kiểu luồng này có thể hữu ích để phân tích tệp văn bản đơn giản hoặc đầu vào bảng điều khiển, khi bạn không có (hoặc không thể nhận) tất cả đầu vào trước khi bắt đầu phân tích cú pháp.
Cá nhân, lần duy nhất tôi có thể nhớ sử dụng Scanner
là cho các dự án trường học, khi tôi phải lấy đầu vào của người dùng từ dòng lệnh. Nó làm cho loại hoạt động dễ dàng. Nhưng nếu tôi có một thứ String
mà tôi muốn tách ra, thì nó gần như không có trí tuệ để đi cùng split()
.