Anda rupanya sudah tahu apa itu regex berdasarkan bagaimana Anda menandai pertanyaan Anda. Apakah Anda mencoba membaca dokumentasi untuk Stringkelas tersebut? Secara khusus, cari kata 'regex'; ada beberapa metode, dan sedikit pemikiran akan memberitahu Anda bagaimana untuk melanjutkan ... :)
Karl Knechtel
3
Frase "karakter khusus" terlalu sering digunakan hingga hampir tidak ada artinya sama sekali. Jika yang Anda maksud adalah, "Saya memiliki daftar karakter tertentu yang ingin saya hapus," maka lakukan seperti yang disarankan Thomas dan bentuk pola Anda dengan kelas karakter regex dan replaceAlltinggalkan. Jika Anda memiliki persyaratan esoterik lainnya, edit pertanyaannya. :)
Ray Toal
1
itu bukan karakter khusus ... ini adalah: äâêíìéè karena mereka bukan tipe karakter 1-byte yang umum seperti - + ^ adalah ... bagaimanapun, seperti yang dikatakan Ray, lakukan a replaceAlluntuk 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.
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.
1 untuk solusi tujuan umum terbaik. Karena Anda mencantumkan beberapa variasi tanpa detail dari OP, Anda mungkin juga menunjukkan dan menjelaskan pola seperti[\P{L}]
Ray Toal
Perhatikan juga bahwa -karakter harus menjadi yang pertama atau terakhir dalam daftar atau harus di-escape.
kapex
[^\\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
Peter
@Peter itu tidak menghilangkan karakter tersebut dalam pengujian saya. Mungkin ada masalah lain dalam kasus Anda, misalnya pengkodean teks yang berbeda. Saya akan menambahkan tautan ke informasi lebih lanjut.
Thomas
1
@ Thomas String result = yourString.replaceAll("[^\w\s]","");membuat kesalahanInvalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
Visruth
40
Ini akan mengganti semua karakter kecuali alfanumerik
Pola adalah ekspresi reguler yang dikompilasi. Dalam banyak kasus, metode praktis seperti String.matches, String.replaceAlldan String.splitakan 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.
String
kelas tersebut? Secara khusus, cari kata 'regex'; ada beberapa metode, dan sedikit pemikiran akan memberitahu Anda bagaimana untuk melanjutkan ... :)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 siniJawaban:
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.
sumber
[\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% benarString 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]","");
sumber
Seperti dijelaskan di sini http://developer.android.com/reference/java/util/regex/Pattern.html
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
sumber
Coba
replaceAll()
metodeString
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!
sumber
Untuk Menghapus Karakter Khusus
String t2 = "!@#$%^&*()-';,./?><+abdd"; t2 = t2.replaceAll("\\W+","");
Outputnya adalah:
abdd.
Ini bekerja dengan sempurna.
sumber
Gunakan
String.replaceAll()
metode di Java. replaceAll harus cukup baik untuk masalah Anda.sumber
Anda dapat menghapus karakter tunggal sebagai berikut:
String str="+919595354336"; String result = str.replaceAll("\\\\+",""); System.out.println(result);
KELUARAN:
919595354336
sumber
Jika Anda hanya ingin melakukan penggantian literal di java, gunakan
Pattern.quote(string)
untuk meng-escape string apa pun ke literal.sumber