2012-07-01 27 views
19

Sau đây là kết quả REPL của tôi. Tôi không chắc chắn tại sao string.split không hoạt động ở đây.scala string.split không hoạt động

val s = "Pedro|groceries|apple|1.42" 
s: java.lang.String = Pedro|groceries|apple|1.42 

scala> s.split("|") 
res27: Array[java.lang.String] = Array("", P, e, d, r, o, |, g, r, o, c, e, r, i, e, s, |, a, p, p, l, e, |, 1, ., 4, 2) 

Trả lời

56

Nếu bạn sử dụng dấu ngoặc kép, bạn đang yêu cầu tách cụm từ thông dụng. | là ký tự "hoặc", vì vậy regex của bạn không khớp hoặc không có gì. Vì vậy, tất cả mọi thứ được phân chia.

Nếu bạn sử dụng split('|') hoặc split("""\|""") bạn sẽ nhận được những gì bạn muốn.

+0

tốt nhất. Trong scala, sự khác biệt giữa '' và '' là gì? – riship89

+2

'" "" nội dung "" "' trích dẫn một chuỗi ký tự. '" stuff "' giải thích các ký tự thoát. Vì dấu chéo ngược là một ký tự thoát _both_ trong chuỗi Java _and_ regexes, bạn sẽ cần phải thoát khỏi ký tự thoát để đưa nó vào regex: '" \\ | "'. Điều này gây nhầm lẫn _very_ một cách nhanh chóng, vì vậy tốt hơn là sử dụng dấu ngoặc kép và đi cho một chuỗi chữ. –

+0

và ... là 'somestring' giống như "" "somestring" ""? – riship89

3

Tách lấy regex làm đối số đầu tiên, do đó cuộc gọi của bạn được hiểu là "chuỗi rỗng hoặc chuỗi trống". Để có được hành vi mong đợi, bạn cần phải thoát khỏi ký tự ống "\\ |".

5

| là một đặc biệt biểu thức chính quy nhân vật được sử dụng như một nhà điều hành hợp lý cho OR hoạt động.

Kể từ java.lang.String#split(String regex); mất trong một biểu thức chính quy, bạn đang tách chuỗi với "none HOẶC none", mà là một tổng thể khác đặc sản về tách biểu thức chính quy, nơi none cơ bản có nghĩa "giữa mỗi ký tự đơn ".

Để có được những gì bạn muốn, bạn cần phải thoát khỏi mẫu regex của mình đúng cách. Để thoát khỏi mẫu, bạn cần phải thêm ký tự với \ và vì \ là một ký tự đặc biệt String (ví dụ: \t\r chẳng hạn), bạn cần thực sự thoát kép để bạn sẽ kết thúc với s.split("\\|").

Đối với cú pháp biểu thức chính quy Java đầy đủ, hãy xem java.util.regex.Pattern javadoc.

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