Saya ingin menghapus karakter khusus seperti:
- + ^ . : ,
dari String menggunakan Java.
Saya ingin menghapus karakter khusus seperti:
- + ^ . : ,
dari String menggunakan Java.
replaceAll
tinggalkan. Jika Anda memiliki persyaratan esoterik lainnya, edit pertanyaannya. :)
replaceAll
untuk mereka, atau, lakukan penguraian string, tambahkan karakter yang bukan karakter yang ingin Anda keluarkan ke string lain dan pada akhirnya cukup lakukan + = ke String yang akan Anda kembalikan.
deleteChars.apply( fromString, "-+^.:," );
- temukan deleteChars di sini
Jawaban:
Itu tergantung pada apa yang Anda definisikan sebagai karakter khusus, tetapi cobalah replaceAll(...)
:
String result = yourString.replaceAll("[-+.^:,]","");
Perhatikan bahwa ^
karakter tersebut tidak boleh menjadi yang pertama dalam daftar, karena Anda harus menghindarinya atau itu berarti "apa saja kecuali karakter ini".
Catatan lain: -
karakter harus menjadi yang pertama atau terakhir pada daftar, jika tidak, Anda harus menghindarinya atau akan menentukan rentang (misalnya, :-,
berarti "semua karakter dalam rentang :
ke ,
).
Jadi, untuk menjaga konsistensi dan tidak tergantung pada posisi karakter, Anda mungkin ingin melarikan diri semua karakter yang memiliki arti khusus dalam ekspresi reguler (daftar berikut tidak lengkap, jadi menyadari karakter lain seperti (
, {
, $
dll) :
String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
Jika Anda ingin menghilangkan semua tanda baca dan simbol, coba regex ini: \p{P}\p{S}
(perlu diingat bahwa dalam string Java Anda harus melepaskan garis miring belakang :) "\\p{P}\\p{S}"
.
Cara ketiga bisa jadi seperti ini, jika Anda dapat menentukan dengan tepat apa yang harus tersisa di string Anda:
String result = yourString.replaceAll("[^\\w\\s]","");
Artinya: ganti semua yang bukan karakter kata (az dalam hal apa pun, 0-9 atau _) atau spasi.
Sunting: harap dicatat bahwa ada beberapa pola lain yang mungkin terbukti membantu. Namun, saya tidak bisa menjelaskan semuanya, jadi lihatlah bagian referensi regular-expressions.info .
Berikut alternatif yang tidak terlalu ketat untuk pendekatan "tentukan karakter yang diizinkan", seperti yang disarankan oleh Ray:
String result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");
Regex cocok dengan semua yang bukan huruf dalam bahasa apa pun dan bukan pemisah (spasi, pemisah baris, dll.). Perhatikan bahwa Anda tidak dapat menggunakan [\P{L}\P{Z}]
(huruf besar P berarti tidak memiliki properti itu), karena itu berarti "segala sesuatu yang bukan huruf atau bukan spasi", yang hampir cocok dengan semuanya, karena huruf bukan spasi dan sebaliknya.
Informasi tambahan tentang Unicode
Beberapa karakter unicode tampaknya menyebabkan masalah karena berbagai kemungkinan cara untuk menyandikannya (sebagai titik kode tunggal atau kombinasi titik kode). Silakan merujuk ke regular-expressions.info untuk informasi lebih lanjut.
[\P{L}]
-
karakter harus menjadi yang pertama atau terakhir dalam daftar atau harus di-escape.
[^\\p{L}\\p{Z}]
tampaknya menghilangkan Umlaut Jerman (ä, ö, ü) juga (setidaknya itu melakukannya untuk saya: /), jadi "Regex cocok dengan semua yang bukan huruf dalam bahasa apa pun" tampaknya tidak 100% benar
String result = yourString.replaceAll("[^\w\s]","");
membuat kesalahanInvalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
Ini akan mengganti semua karakter kecuali alfanumerik
replaceAll("[^A-Za-z0-9]","");
Seperti dijelaskan di sini http://developer.android.com/reference/java/util/regex/Pattern.html
Pola adalah ekspresi reguler yang dikompilasi. Dalam banyak kasus, metode praktis seperti
String.matches
,String.replaceAll
danString.split
akan lebih disukai, tetapi jika Anda perlu melakukan banyak pekerjaan dengan ekspresi reguler yang sama, mungkin lebih efisien untuk mengkompilasinya sekali dan menggunakannya kembali. Kelas Pola dan pendampingnya, Matcher, juga menawarkan lebih banyak fungsionalitas daripada sejumlah kecil yang diekspos oleh String.
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;
}
}
Hasil
String is = one
Number is = 9196390097
Coba replaceAll()
metode String
kelas.
BTW di sini adalah metode, tipe pengembalian dan parameter.
public String replaceAll(String regex,
String replacement)
Contoh:
String str = "Hello +-^ my + - friends ^ ^^-- ^^^ +!";
str = str.replaceAll("[-+^]*", "");
Ini harus menghapus semua karakter {'^', '+', '-'} yang ingin Anda hapus!
Untuk Menghapus Karakter Khusus
String t2 = "!@#$%^&*()-';,./?><+abdd";
t2 = t2.replaceAll("\\W+","");
Outputnya adalah: abdd.
Ini bekerja dengan sempurna.
Gunakan String.replaceAll()
metode di Java.
replaceAll harus cukup baik untuk masalah Anda.
String
kelas tersebut? Secara khusus, cari kata 'regex'; ada beberapa metode, dan sedikit pemikiran akan memberitahu Anda bagaimana untuk melanjutkan ... :)