2010-10-01 29 views
27

Tôi đang cố gắng tách một String. ví dụ đơn giản làm việc:Grails: Tách một chuỗi có chứa một đường ống

groovy:000> print "abc,def".split(","); 
[abc, def]===> null 
groovy:000> 

Nhưng thay vì dấu phẩy, tôi cần phải chia nó trên đường ống, và tôi không nhận được kết quả mong muốn:

groovy:000> print "abc|def".split("|"); 
[, a, b, c, |, d, e, f]===> null 
groovy:000> 

Vì vậy, tất nhiên lựa chọn đầu tiên của tôi sẽ là để chuyển từ đường ống (|) thành dấu phẩy (,) làm dấu phân tách.

Nhưng giờ tôi bị hấp dẫn: Tại sao tính năng này không hoạt động? Thoát khỏi ống (\|) dường như không giúp:

groovy:000> print "abc|def".split("\|"); 
ERROR org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, groovysh_parse: 1: unexpected char: '\' @ line 1, column 24. 
    print "abcdef".split("\|"); 
         ^

1 error 
| 
     at java_lang_Runnable$run.call (Unknown Source) 
groovy:000> 

Trả lời

53

Bạn cần chia trên \\|.

+0

Ông có thể cung cấp một ví dụ? Nó không giống như đoạn mã cuối cùng tôi đã cung cấp? – Tom

+0

@Tom, đó là một vấn đề định dạng, anh ta có nghĩa là '\\ |'. Bạn cần phải thoát khỏi '\' để giải thích nó trong String, vì vậy nó có thể thoát khỏi '|' –

+0

@Colin Cảm ơn bạn rất nhiều. Không bắt được sự cố định dạng đó. Lời xin lỗi của tôi. – Tom

17

Bạn phải thoát khỏi đường ống, thực sự, nó có ý nghĩa đặc biệt trong cụm từ thông dụng. Tuy nhiên, nếu bạn sử dụng dấu ngoặc kép, bạn cũng phải thoát khỏi dấu gạch chéo. Về cơ bản, hai lựa chọn sau đó:

asserts "abc|def".split("\\|") == ['abc','def'] 

hoặc sử dụng / như chuỗi dấu phân cách để tránh thêm thoát

asserts "abc|def".split(/\|/) == ['abc','def'] 
+0

Cảm ơn! '/' Có vẻ giống nhau và quen thuộc :) – Tom

+0

+1 cho lời giải thích và trình diễn được định dạng chính xác. Tôi không biết tại sao câu trả lời khác lại nhận được tất cả tình yêu, điều này tốt hơn nhiều. –

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