2013-04-17 27 views
7

Tại sao khối thứ nhất hoạt động nhưng khối thứ 2 không hoạt động?Máy quét Java vs Trình so khớp - Cụm từ thông dụng, Công cụ đối sánh, Máy quét không

int numberOfDigits = 2; 
Pattern p = Pattern.compile("[01]{"+numberOfDigits+"}"); 
Matcher m = p.matcher("101100101011010011111000"); 
while(m.find()){ 
    System.out.println(m.group()); 
} 

khối 2

Scanner scannerSegment = new Scanner("101100101011010011111000"); 
    while(scannerSegment.hasNext(p)){ 
    String segment = scannerSegment.next(p); 
     System.out.println(segment); 

    } 

Trả lời

3

Scanner không phải là tiện ích thích hợp để lấy mẫu sử dụng phương pháp hasNext(Pattern pattern) của nó. Nó sẽ kiểm tra xem mã thông báo hoàn chỉnh tiếp theo có mẫu được yêu cầu hay không.

Java API là tài liệu tốt nhất.

Một số đoạn trích:

hasNext() : Returns true if the next complete token matches the specified 
pattern. A complete token is prefixed and postfixed by input that matches 
the delimiter pattern.` 

Vì vậy, nếu bạn thay đổi các đầu vào được giới hạn bởi không gian hay bất cứ delimiter khác (delimiters khác phải được thiết lập sau khi xác định đối tượng Scanner), nó sẽ làm việc. Vì vậy, đây sẽ làm việc (đối với mô hình hiện tại):

Scanner scannerSegment = new Scanner("10 11 00 10 10 11 01 00 11 11 10 00"); 

Ngay cả điều này sẽ làm việc (đối với mô hình hiện tại):

Scanner scannerSegment = new Scanner("10,11,00,10,10,11,01,00,11,11,10,00"); 
scannerSegment.useDelimiter(","); 

EDIT: Scanner phá vỡ đầu vào của nó vào thẻ sử dụng một mô hình delimiter, mà theo mặc định khớp với khoảng trắng.

+0

Cảm ơn, Bạn có tài liệu nào để hỗ trợ không? – Achow

+0

Bạn có chắc chắn rằng, trong trường hợp tạo đối tượng 'Scanner' với hàm tạo' Scanner (String source) ', máy quét này hoạt động với chuỗi nguồn như với một mã thông báo hoàn chỉnh? Tôi không tìm thấy gì để xác nhận dự đoán của mình. – bsiamionau

+0

Bạn có thể đăng bản demo làm việc hoàn chỉnh không? Nó vẫn không hiệu quả với tôi. – bsiamionau

Các vấn đề liên quan