Bagaimana cara mengganti karakter khusus dalam string?


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:


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


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]", "");

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


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.


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;
    }
}


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.



-1
let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.