2013-05-13 29 views
6

Tôi có một trường hợp trong đó tôi đang làm như sau:Chia Chuỗi By Character

final String[] columns = row.split(delimiter.toString()); 

đâu delimiter là một nhân vật.

Tính năng này hoạt động tốt khi tôi cần chia nhỏ dựa trên các tab bằng cách cung cấp \t làm dấu phân cách. Tuy nhiên, khi tôi muốn tách trên một đường ống, tôi vượt qua một dấu phân cách của | và điều này không hoạt động như mong đợi.

Tôi đã đọc một số bài viết về cách | là một ký tự đặc biệt có nghĩa là rỗng hoặc trống do đó nó chia tách trên mọi ký tự nó gặp, mặc dù, tôi không muốn hành vi này.

tôi có thể làm một kiểm tra đơn giản trong mã của tôi đối với trường hợp ống này và nhận được xung quanh vấn đề này:

if ("|".equals(delimiter.toString())) { 
    columns = row.split("\\" + delimiter.toString()); 
} 
else { 
    columns = row.split(delimiter.toString()); 
} 

Nhưng tôi không biết nếu có được một cách dễ dàng hơn để làm được việc này. Ngoài ra, có bất kỳ ký tự đặc biệt nào khác hoạt động như số | mà tôi cần tính đến không?

Trả lời

18

Hãy thử:

import java.util.regex.Pattern; 

... 

final String[] columns = row.split(Pattern.quote(delimiter.toString())); 

Liên quan đến metacharacters khác, vì chúng ta được mời gọi, đây là một trích dẫn từ các String Literals hướng dẫn:

API này cũng hỗ trợ một số đặc biệt các ký tự ảnh hưởng đến cách một mẫu được khớp.

...

Các metacharacters hỗ trợ bởi API này là: < ([{\^- = $ |!]}) * +>

Xem:?.

+0

Cảm ơn, điều đó đã hoạt động hoàn hảo. Tôi sẽ chấp nhận trong 11 phút. –

4
  1. Bạn có thể sử dụng StringUtils từ Apache Commons Lang được trang bị với các phương pháp tiếp nhận văn bản đơn giản, biểu hiện không bình thường:

    public static String[] split(String str, char separatorChar) 
    public static String[] split(String str, String separatorChars) 
    
  2. Bạn cũng có thể sử dụng lớp StringTokenzier, mà không mong đợi một biểu hiện thường xuyên như dấu phân tách.

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