2013-08-05 56 views
11

Tôi muốn chia chuỗi khi theo dõi các ký hiệu gặp phải "+, -, *, /, =" Tôi đang sử dụng chức năng chia tách nhưng chức năng này chỉ có thể lấy một đối số . Hơn nữa nó không hoạt động trên "+". Tôi đang sử dụng mã sau: -Tách chuỗi trong java trên nhiều ký hiệu

Stringname.split("Symbol"); 

Cảm ơn.

+0

Bạn đã bắt đầu bằng cách đọc javadoc chưa? Phải có một số giải thích về lý do tại sao tách trên '+' không cung cấp cho bạn những gì bạn muốn. –

+0

Có thể xem: http://stackoverflow.com/questions/7492672/java-string-split-by-multiple-character-delimiter – kadrian

Trả lời

31

String.split mất một biểu hiện thường xuyên như là đối số.

Điều này có nghĩa là bạn có thể thay thế bất kỳ biểu tượng hoặc văn bản trừu tượng nào trong một thông số để tách số String của mình.

Xem tài liệu here.

Dưới đây là một ví dụ trong trường hợp của bạn:

String toSplit = "a+b-c*d/e=f"; 
String[] splitted = toSplit.split("[-+*/=]"); 
for (String split: splitted) { 
    System.out.println(split); 
} 

Output:

a 
b 
c 
d 
e 
f 

Ghi chú:

  • ký tự Reserved cho Pattern s phải được tăng gấp đôi thoát với \\. Chỉnh sửa: Không cần thiết ở đây.
  • Các dấu ngoặc đơn [] trong mẫu biểu thị một lớp nhân vật.
  • Thông tin thêm về Pattern s here.
+0

Không cần phải thoát khỏi các ký tự meta đó trong lớp nhân vật. –

+0

@RohitJain vâng, chỉ cần nhận ra.Tôi đã chỉnh sửa câu trả lời của mình, cảm ơn vì đã chỉ ra. – Mena

+0

sẽ hoạt động hoặc "+" – Saumyaraj

3

Bạn cần Cụm từ thông dụng. Addionaly bạn cần OR hành regex:

String[]tokens = Stringname.split("\\+|\\-|\\*|\\/|\\="); 
9

Bạn có thể sử dụng một biểu thức chính quy:

String[] tokens = input.split("[+*/=-]"); 

Lưu ý: - nên được đặt ở vị trí đầu tiên hoặc cuối cùng để chắc chắn rằng nó không được coi là một dấu phân cách tầm xa.

+1

Id thay thế "_must không nằm trong second_" với "_must được trong _ đầu tiên hoặc cuối cùng" ... – jlordo

+0

@jlordo 'input.split (" [+ * -/=] ");' hoạt động tốt ... – assylias

+0

mặc dù 'input.split (" [+ */- =] ");' không ... – assylias

1

Vì lý do đó, bạn cần sử dụng câu lệnh regex phù hợp. Hầu hết các biểu tượng bạn liệt kê đều được đặt trước trong regex, vì vậy bạn sẽ phải thoát chúng bằng \.

Biểu thức cơ bản sẽ là \+|\-|\\|\*|\=. Tương đối dễ hiểu, mỗi biểu tượng bạn muốn được thoát với \ và mỗi biểu tượng được phân cách bằng ký hiệu | (hoặc). Ví dụ: nếu bạn muốn thêm ^, tất cả những gì bạn cần làm là nối thêm |\^ vào tuyên bố đó.

Để thử nghiệm và biểu đạt nhanh, tôi thích sử dụng www.regexpal.com

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