Bir dizedeki özel karakterler nasıl değiştirilir?


Yanıtlar:


187

Bu ne demek istediğine bağlı. Sadece onlardan kurtulmak istiyorsanız, şunu yapın:
(Güncelleme: Görünüşe göre rakamları da tutmak istiyorsun, bu durumda ikinci satırları kullan)

String alphaOnly = input.replaceAll("[^a-zA-Z]+","");
String alphaAndDigits = input.replaceAll("[^a-zA-Z0-9]+","");

veya eşdeğeri:

String alphaOnly = input.replaceAll("[^\\p{Alpha}]+","");
String alphaAndDigits = input.replaceAll("[^\\p{Alpha}\\p{Digit}]+","");

(Bunların tümü, normal ifade kalıbını önceden derleyerek ve bir sabit olarak saklayarak önemli ölçüde geliştirilebilir)

Veya Guava ile :

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

Ancak aksanlı karakterleri hala ascii olan mantıklı bir şeye dönüştürmek istiyorsanız, şu sorulara bakın:


Bu işlevi kullandığımda tüm sayıları da siliyor. ama sayıların kaldırılmasını istemiyorum. sadece özel karakterleri kaldırmak istiyorum.Lütfen bir şey önerin ..
Tanu

Pekala, sadece alfabeyi istediğini söyledin. Ama cevabımı bir dakika içinde güncelleyeceğim
Sean Patrick Floyd

Dizgeyi birleştirmek istiyorum, ancak 1. gibi bir koşulla yalnızca bir sonuç varsa concat gerekli değil 2. Sonuç, aşağıdaki biçimdeki örnekteki concat dizeden 1'den büyükse: yığın + fazla + akış
Tanu

2
@Tanu bu farklı bir soru. Yeni bir tane yap
Pekka

Ya boşlukların kaldırılmasını istemiyorsam? veya sekme, satırsonu gibi tüm boşlukların tek boşluk olarak daraltıldığını mı söylüyorsunuz?
lanetlendi

74

Bunu kullanıyorum

s = s.replaceAll("\\W", ""); 

Dizedeki tüm özel karakterleri değiştirir.

Buraya

\ w: [a-zA-Z_0-9] için kısa bir kelime karakteri

\ W: Sözcük olmayan bir karakter


<script> alert ('XSS Saldırısı') </script> için çalışmaz. '<', '>', '\' Karakterleri nasıl kaldırılır?
Manoj

11

Alfasayısal karakterleri korumak için aşağıdaki yöntemi kullanabilirsiniz.

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

Yalnızca alfabetik karakterleri tutmak istiyorsanız bunu kullanın

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

6
Yer kullanımı içinreplaceAll("[^a-zA-Z0-9 ]", "");
Qamar

6

Tüm özel karakterleri şu şekilde değiştirin:

replaceAll("\\your special character","new character");

ör: * tüm oluşumunu beyaz boşlukla değiştirmek için

replaceAll("\\*","");

* bu ifade aynı anda yalnızca bir tür özel karakterin yerini alabilir


Kesinlikle "Bir dizedeki özel karakterler nasıl değiştirilir?" Sorusunun başlığını gördüğümde arıyordum. Teşekkürler!
Bay Drew

2
string Output = Regex.Replace(Input, @"([ a-zA-Z0-9&, _]|^\s)", "");

Burada boşluk, virgül ve ve işareti dışındaki tüm özel karakterler değiştirilir. Aşağıdaki normal ifadeyle boşluk, virgül ve ve işaretini de atlayabilirsiniz.

string Output = Regex.Replace(Input, @"([ a-zA-Z0-9_]|^\s)", "");

Giriş, karakterleri değiştirmemiz gereken dizedir.


2

Andrzej Doyle'un cevabının örneğini takip ederek , daha iyi çözümün şunu kullanmak olduğunu düşünüyorum 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

Bu önemsiz karakter için pencere bilgisayarındaki karakter eşleme aracından unicode alabilir ve telif hakkı simgesi için \ u eg \ u00a9 ekleyebilirsiniz. Artık bu dizeyi o belirli önemsiz caharacter ile kullanabilirsiniz, herhangi bir gereksiz karakteri kaldırmayın, uygun unicode ile değiştirin.



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

Normal ifadeyi biraz açıklayabilir misin?
stdunbar

Kodunuzu açıklamak için cevap bölümüne notlar eklemenizi tavsiye ederim. Daha okuyun lütfen iyi cevapları yazma .
Joe Ferndz

Bu soruya gerçekten cevap vermiyor. Farklı bir sorunuz varsa, Soru Sor'a tıklayarak sorabilirsiniz . Yeterli itibara sahip olduğunuzda bu soruya daha fazla dikkat çekmek için bir ödül de ekleyebilirsiniz . - Yorumdan
Aman Garg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.