Bagaimana cara mengganti karakter khusus dalam string?

91

Saya memiliki string dengan banyak karakter khusus. Saya ingin menghapus semua itu, tetapi tetap menggunakan karakter alfabet.

Bagaimana saya bisa melakukan ini?

Tanu
sumber
Lihat utas ini: stackoverflow.com/questions/3438854/…
Cyril Gandon

Jawaban:

187

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:

Sean Patrick Floyd
sumber
ketika saya menggunakan fungsi ini, itu juga menghapus semua angka. tetapi saya tidak ingin nomor dihapus. hanya ingin menghapus karakter khusus. Tolong sarankan sesuatu ..
Tanu
baik Anda bilang Anda hanya menginginkan alfabet. Tapi saya akan memperbarui jawaban saya sebentar lagi
Sean Patrick Floyd
Saya ingin menggabungkan string tetapi dengan beberapa kondisi seperti 1. Jika hanya ada satu hasil, tidak diperlukan concat 2. Jika hasilnya lebih dari 1 dari string concat dalam contoh bentuk berikut: stack + over + flow
Tanu
2
@Tanu itu pertanyaan yang berbeda. Buat yang baru
Pekka
Bagaimana jika saya tidak ingin spasi dihapus? atau mengatakan semua spasi seperti tab, baris baru diciutkan hanya sebagai satu spasi?
terkutuk pada
74

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

Dhiral Pandya
sumber
Tidak bekerja untuk <script> alert ('XSS Attack') </script>. Bagaimana cara menghapus karakter '<', '>', '\'?
Manoj
11

Anda dapat menggunakan metode berikut untuk menyimpan karakter alfanumerik.

replaceAll("[^a-zA-Z0-9]", "");

Dan jika Anda hanya ingin menyimpan karakter alfabet, gunakan ini

replaceAll("[^a-zA-Z]", "");
dhuma1981
sumber
6
Untuk penggunaan ruangreplaceAll("[^a-zA-Z0-9 ]", "");
Qamar
6

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

krishnamurthy
sumber
Pasti apa yang saya cari ketika saya melihat judul pertanyaan "Bagaimana cara mengganti karakter khusus dalam string?" Terima kasih!
Tn. Drew
2
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.

Mike Clark
sumber
2

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;
    }
}
Marco Sulla
sumber
0

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

Madhu Nandan
sumber
0

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.

Mundroid
sumber
0

Untuk spasi, gunakan pola ini "[^ az AZ 0-9]"

Muhammad Ahsan
sumber
-1
let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();
sior salju
sumber
Bisakah Anda menjelaskan sedikit tentang regex?
stdunbar
saya sarankan Anda menambahkan catatan di bagian jawaban Anda untuk menjelaskan kode Anda. Silakan baca lebih lanjut tentang bagaimana menulis jawaban yang baik .
Joe Ferndz
Ini tidak benar-benar menjawab pertanyaan itu. Jika Anda memiliki pertanyaan yang berbeda, Anda dapat menanyakannya dengan mengklik Ajukan Pertanyaan . Anda juga dapat menambahkan hadiah untuk menarik lebih banyak perhatian pada pertanyaan ini setelah Anda memiliki reputasi yang cukup . - Dari Ulasan
Aman Garg