Tôi muốn xóa các ký tự đặc biệt như:
- + ^ . : ,
từ một chuỗi sử dụng Java.
Tôi muốn xóa các ký tự đặc biệt như:
- + ^ . : ,
từ một chuỗi sử dụng Java.
replaceAll
loại bỏ chúng. Nếu bạn có thêm yêu cầu bí truyền, hãy chỉnh sửa câu hỏi. :)
replaceAll
cho chúng hoặc, thực hiện phân tích cú pháp chuỗi, thêm các ký tự không phải là các ký tự bạn muốn lấy ra vào một chuỗi khác và cuối cùng chỉ cần thực hiện dấu + = cho một Chuỗi mà bạn sẽ trả về.
deleteChars.apply( fromString, "-+^.:," );
- tìm deleteChars tại đây
Câu trả lời:
Điều đó phụ thuộc vào những gì bạn xác định là các ký tự đặc biệt, nhưng hãy thử replaceAll(...)
:
String result = yourString.replaceAll("[-+.^:,]","");
Lưu ý rằng ^
ký tự không được là ký tự đầu tiên trong danh sách, vì sau đó bạn phải thoát khỏi nó hoặc nó có nghĩa là "bất kỳ ngoại trừ các ký tự này".
Một lưu ý khác: -
ký tự cần phải là ký tự đầu tiên hoặc cuối cùng trong danh sách, nếu không bạn phải thoát khỏi nó hoặc nó sẽ xác định một phạm vi (ví dụ: :-,
có nghĩa là "tất cả các ký tự trong phạm vi :
đến ,
).
Vì vậy, để duy trì ổn định và không phụ thuộc vào vị trí nhân vật, bạn có thể muốn thoát khỏi tất cả những nhân vật mà có một ý nghĩa đặc biệt trong biểu thức thông thường (danh sách sau đây là chưa hoàn chỉnh, vì vậy hãy ý thức về nhân vật khác như (
, {
, $
vv) :
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
Nếu bạn muốn loại bỏ tất cả các dấu câu và ký hiệu, hãy thử regex này: \p{P}\p{S}
(hãy nhớ rằng trong chuỗi Java, bạn phải thoát khỏi dấu gạch chéo ngược "\\p{P}\\p{S}"
:).
Cách thứ ba có thể giống như thế này, nếu bạn có thể xác định chính xác những gì nên để lại trong chuỗi của mình:
String result = yourString.replaceAll("[^\\w\\s]","");
Điều này có nghĩa là: thay thế mọi thứ không phải là ký tự từ (az trong mọi trường hợp, 0-9 hoặc _) hoặc khoảng trắng.
Chỉnh sửa: xin lưu ý rằng có một vài mẫu khác có thể hữu ích. Tuy nhiên, tôi không thể giải thích tất cả, vì vậy hãy xem phần tham khảo của regular-expressions.info .
Đây là phương pháp thay thế ít hạn chế hơn cho phương pháp "xác định ký tự được phép", như Ray đề xuất:
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
Regex khớp với mọi thứ không phải là chữ cái trong bất kỳ ngôn ngữ nào và không phải là dấu phân cách (khoảng trắng, ngắt dòng, v.v.). Lưu ý rằng bạn không thể sử dụng[\P{L}\P{Z}]
(chữ hoa P có nghĩa là không có thuộc tính đó), vì điều đó có nghĩa là "mọi thứ không phải là chữ cái hoặc không phải khoảng trắng", hầu như khớp với mọi thứ, vì các chữ cái không phải là khoảng trắng và ngược lại.
Thông tin bổ sung về Unicode
Một số ký tự unicode dường như gây ra sự cố do các cách khác nhau có thể có để mã hóa chúng (như một điểm mã duy nhất hoặc kết hợp các điểm mã). Vui lòng tham khảo thường- expressions.info để biết thêm thông tin.
[\P{L}]
-
ký tự phải là ký tự đầu tiên hoặc cuối cùng trong danh sách, nếu không ký tự cần phải được thoát ra.
[^\\p{L}\\p{Z}]
dường như cũng loại bỏ tiếng Đức Umlauts (ä, ö, ü) (ít nhất nó cũng làm như vậy đối với tôi: /), vì vậy "Regex khớp với mọi thứ không phải là chữ cái trong bất kỳ ngôn ngữ nào" dường như không đúng 100%
String result = yourString.replaceAll("[^\w\s]","");
làm lỗiInvalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
Điều này sẽ thay thế tất cả các ký tự ngoại trừ chữ và số
replaceAll("[^A-Za-z0-9]","");
Như được mô tả tại đây http://developer.android.com/reference/java/util/regex/Pattern.html
Các mẫu được biên dịch các biểu thức chính quy. Trong nhiều trường hợp, các phương thức tiện lợi như
String.matches
,String.replaceAll
vàString.split
sẽ được ưu tiên hơn, nhưng nếu bạn cần thực hiện nhiều thao tác với cùng một biểu thức chính quy, thì việc biên dịch một lần và sử dụng lại nó có thể hiệu quả hơn. Lớp Pattern và đồng hành của nó, Matcher, cũng cung cấp nhiều chức năng hơn so với số lượng nhỏ mà String hiển thị.
public class RegularExpressionTest {
public static void main(String[] args) {
System.out.println("String is = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()("));
System.out.println("Number is = "+getOnlyDigits("&(*^*(^(+91-&*9hi-639-0097(&(^("));
}
public static String getOnlyDigits(String s) {
Pattern pattern = Pattern.compile("[^0-9]");
Matcher matcher = pattern.matcher(s);
String number = matcher.replaceAll("");
return number;
}
public static String getOnlyStrings(String s) {
Pattern pattern = Pattern.compile("[^a-z A-Z]");
Matcher matcher = pattern.matcher(s);
String number = matcher.replaceAll("");
return number;
}
}
Kết quả
String is = one
Number is = 9196390097
Hãy thử replaceAll()
phương pháp của String
lớp.
BTW ở đây là phương thức, kiểu trả về và các tham số.
public String replaceAll(String regex,
String replacement)
Thí dụ:
String str = "Hello +-^ my + - friends ^ ^^-- ^^^ +!";
str = str.replaceAll("[-+^]*", "");
Nó sẽ xóa tất cả các ký tự {'^', '+', '-'} mà bạn muốn xóa!
Để xóa ký tự đặc biệt
String t2 = "!@#$%^&*()-';,./?><+abdd";
t2 = t2.replaceAll("\\W+","");
Đầu ra sẽ là: abdd.
Điều này hoạt động hoàn hảo.
Sử dụng String.replaceAll()
phương thức trong Java.
ReplaceAll phải đủ tốt cho vấn đề của bạn.
String
lớp học chưa? Đặc biệt, hãy tìm từ 'regex'; có một vài phương pháp, và một chút suy nghĩ nên nói với bạn cách thức tiến hành ... :)