Saya memiliki string dengan banyak karakter khusus. Saya ingin menghapus semua itu, tetapi tetap menggunakan karakter alfabet.
Bagaimana saya bisa melakukan ini?
Jawaban:
Tergantung apa yang Anda maksud. Jika Anda hanya ingin menyingkirkannya, lakukan ini:
(Perbarui: Tampaknya Anda juga ingin menyimpan angka, gunakan baris kedua dalam kasus itu)
String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");
atau yang setara:
String alphaOnly = input.replaceAll("[^\\p{Alpha}]+","");
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+","");
(Semua ini dapat ditingkatkan secara signifikan dengan mengkompilasi pola regex dan menyimpannya dalam konstanta)
Atau, dengan Jambu Biji :
private static final CharMatcher ALNUM =
CharMatcher.inRange('a', 'z').or(CharMatcher.inRange('A', 'Z'))
.or(CharMatcher.inRange('0', '9')).precomputed();
// ...
String alphaAndDigits = ALNUM.retainFrom(input);
Tetapi jika Anda ingin mengubah karakter beraksen menjadi sesuatu yang masuk akal yang masih ascii, lihat pertanyaan berikut:
Saya menggunakan ini.
s = s.replaceAll("\\W", "");
Ini menggantikan semua karakter khusus dari string.
Sini
\ w: Karakter kata, kependekan dari [a-zA-Z_0-9]
\ W: Karakter non-kata
Ganti karakter khusus dengan
replaceAll("\\your special character","new character");
mis .: untuk mengganti semua kemunculan * dengan spasi
replaceAll("\\*","");
* Pernyataan ini hanya dapat menggantikan satu jenis karakter khusus dalam satu waktu
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");
Di sini semua karakter khusus kecuali spasi, koma, dan ampersand diganti. Anda juga dapat menghilangkan spasi, koma, dan ampersand dengan ekspresi reguler berikut.
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");
Dimana Input adalah string yang perlu kita ganti karakternya.
Mengikuti contoh jawaban Andrzej Doyle , saya pikir solusi yang lebih baik adalah menggunakan org.apache.commons.lang3.StringUtils.stripAccents():
package bla.bla.utility;
import org.apache.commons.lang3.StringUtils;
public class UriUtility {
public static String normalizeUri(String s) {
String r = StringUtils.stripAccents(s);
r = r.replace(" ", "_");
r = r.replaceAll("[^\\.A-Za-z0-9_]", "");
return r;
}
}
Anda dapat menggunakan ekspresi reguler dasar pada string untuk menemukan semua karakter khusus atau menggunakan kelas pola dan pencocokan untuk mencari / mengubah / menghapus string yang ditentukan pengguna. Tautan ini memiliki beberapa contoh ekspresi reguler yang sederhana dan mudah dipahami: http://www.vogella.de/articles/JavaRegularExpressions/article.html
Anda bisa mendapatkan unicode untuk karakter sampah itu dari alat charactermap di jendela pc dan menambahkan \ u eg \ u00a9 untuk simbol hak cipta. Sekarang Anda dapat menggunakan string itu dengan karakter sampah tertentu, jangan hapus karakter sampah apa pun tetapi ganti dengan unicode yang tepat.
Untuk spasi, gunakan pola ini "[^ az AZ 0-9]"
let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();