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.