2012-07-08 39 views

Trả lời

5

Đây thực sự là hai đường thoát hiểm trong những bối cảnh khác nhau, do thực tế rằng đối số là một biểu hiện thường xuyên biểu diễn dưới dạng một chuỗi.

[ phải được thoát vì nếu không nó sẽ có ý nghĩa đặc biệt trong cụm từ thông dụng. Lối thoát cho cụm từ thông dụng sẽ làm cho nó là \[. Nhưng sau đó \ phải được thoát vì nó có ý nghĩa đặc biệt trong một chuỗi (để thoát và đại diện cho các ký tự theo giá trị số).

Nó có thể tồi tệ hơn nhiều, vì ký tự \ được sử dụng để thoát trong cả hai ngữ cảnh. Nếu bạn muốn chia cho ký tự \, bạn phải thoát khỏi nó (\\) để sử dụng cụm từ thông dụng, nhưng sau đó bạn có hai ký tự \, cả hai đều phải được thoát trong ngữ cảnh chuỗi. Việc sử dụng trong chuỗi gốc bạn đang tách cũng sẽ cần phải thoát nếu bạn viết nó như là một hằng số, do đó, sự phân chia tương tự sẽ như sau:

"hello\\world".split("\\\\") 
1

Các phiên bản khác nhau của Groovy cho kết quả khác nhau.

Đối với Groovy 1.1-BETA-1 trở đi,

assert "hello[world".split("\\[") == ["hello", "world"] 

khẳng định OK, nhưng Groovy 1.0 và trước khi đưa ra một lỗi khẳng định.

assert "hello[world".split(/\[/) == ["hello", "world"] 

khẳng định OK cho tất cả các phiên bản từ 1.1-BETA-1 trở đi, Groovy 1.0-JSR-01-1,0 đưa ra một lỗi khẳng định, trong khi Groovy 1.0-beta-10 và trước khi đưa ra một lỗi từ vựng.

"hello[world".split("\\[").each{println it} 

cho tất cả các phiên bản của Groovy từ 1,0-beta-5, và beta-3, bản in

hello 
world 

nhưng 1,0-beta-4 in

[.] 
[.] 
hello 
world 
Các vấn đề liên quan