2016-10-27 24 views
6

Theo the javadoc for java.util.Scanner.skip, phương pháp này:Scanner.skip tài liệu liên quan đến delimiters

bỏ qua đầu vào phù hợp với mô hình quy định, phớt lờ delimiters.

Nhưng tôi bối rối như những gì các cụm từ 'phớt lờ delimeters' có nghĩa là vì đoạn mã sau ném một ngoại lệ sử dụng Java 7 trong Eclipse:

import java.util.Scanner; 

public class Example 
{ 

    public static void main(String [] args) 
    { 
     Scanner sc = new Scanner("Hello World! Here 55"); 
     String piece = sc.next(); 

     sc.skip("World"); // Line A throws NoSuchElementException, vs. 
     sc.skip("\\sWorld"); // Line B works! 
     sc.findInLine("World"); // Line C works! 
    } 
} 

Nó dường như không bỏ qua delimiters khi bỏ qua, như được minh họa bởi Line A. Tuy nhiên Line C xuất hiện để hoạt động mặc dù tài liệu của nó sử dụng cùng cụm từ "bỏ qua dấu phân tách". Tôi không rõ ràng về khái niệm "bỏ qua các dấu phân cách" trong trường hợp này hay đây có phải là lỗi thực sự không? Tôi đang thiếu gì?

Trả lời

2

Bạn bỏ qua câu tiếp theo mô tả của phương pháp mà đọc (tôi nhấn mạnh):

Phương pháp này sẽ bỏ qua đầu vào nếu một neo trận đấu của mô hình định thành công.

Vì vậy, Scanner không phải là quá nhiều "bỏ qua" dấu phân cách, nhưng chỉ đơn giản là cố gắng khớp biểu thức chính quy được chỉ định mà không tính đến dấu phân cách. Nói cách khác, khoảng trắng trước World không được coi là dấu phân tách bởi skip(), nhưng chỉ là một phần của đầu vào mà nó đang cố gắng đối sánh.

+0

Tôi hiểu lời giải thích của bạn. Có lẽ họ nên đưa ra cụm từ 'bỏ qua dấu phân cách' và liên kết với khái niệm của Matcher về "neo đậu" vì tôi chỉ mơ hồ nhận thức được khái niệm đó. Tôi cho rằng "neo" sẽ trỏ đến mã thông báo tiếp theo vì cụm từ gây hiểu lầm đó. Bạn có đồng ý không? –

+0

Neo là ký tự tiếp theo mà 'Máy quét' sẽ đọc. Vì vậy, trong bối cảnh này, 'Scanner.skip()' là ngữ nghĩa gần hơn với 'Matcher.matches()' hơn là 'Matcher.find()'. –

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