2011-11-20 49 views
10

Câu hỏi của tôi liên quan đến phương thức replaceAll của lớp String.regex chính xác để thay thế dấu gạch ngang bằng dấu "-" cơ bản trong java

Mục đích của tôi là thay thế tất cả dấu gạch ngang trong văn bản bằng "-" cơ bản. Tôi biết ký tự unicode của dấu gạch ngang là \ u2014.

Tôi đã thử nó theo cách sau:

String s = "asd – asd"; 
s = s.replaceAll("\u2014", "-"); 

Tuy nhiên, em-dash không được thay thế. Tôi đang làm gì sai?

+0

bạn đang thay thế \ u2014 với - trong chuỗi asd - asd, nơi không có chuỗi \ u2014 được tìm thấy –

+0

có một, tạo ra và sao chép một cách trực tiếp từ từ ms – user975705

Trả lời

21

Chỉnh sửa nhỏ sau khi chỉnh sửa câu hỏi:

Bạn có thể không sử dụng dấu gạch ngang. Nếu bạn không chắc chắn những gì bạn có, một giải pháp tốt đẹp là chỉ đơn giản là tìm và thay thế tất cả các dấu gạch ngang ... em hay cách khác. Hãy nhìn vào this answer, bạn có thể thử sử dụng Unicode dash punctuation property cho tất cả các dấu gạch ngang ==>\\p{Pd}

String s = "asd – asd"; 
s = s.replaceAll("\\p{Pd}", "-"); 

Working example thay thế một dấu gạch ngang và dấu gạch ngang em thường xuyên cả với đoạn code trên.

Tài liệu tham khảo:
public String replaceAll(String regex, String replacement)
Unicode Regular Expressions

+0

thử nó trong cả hai cách. Vẫn không khắc phục được sự cố. – user975705

+0

@ user975705 - Tôi đã chỉnh sửa ... hiện tại thì sao? –

+0

Điều đó đã làm được điều đó! Cảm ơn! – user975705

2

String.replaceAll mất một regex như tham số đầu tiên của nó. Nếu bạn chỉ muốn thay thế tất cả các lần xuất hiện của một char duy nhất bằng cách char khác, xem xét sử dụng String.replace(char, char):

String s = "asd – asd"; 
s = s.replace('\u2014', '-'); 
+0

cảm ơn đề xuất. Đã thử nó, nhưng vẫn không thay thế dấu gạch ngang. – user975705

1

It works fine for me. Tôi đoán là bạn không sử dụng dấu gạch ngang. Kiểm tra sao chép-dán ký tự gạch ngang từ bản đồ ký tự thay vì từ.

+0

Cảm ơn bạn đã chỉ cho tôi đến trang web đó (ideone). –

0

Bạn nhầm lẫn thông số.
Hãy thử điều này
String s = "asd – asd"; s = s.replaceAll("-", "\u2014");

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