Çok sayıda özel karakter içeren bir dizem var. Tüm bunları kaldırmak ama alfabetik karakterleri korumak istiyorum.
Bunu nasıl yapabilirim?
Yanıtlar:
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:
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
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]", "");
replaceAll("[^a-zA-Z0-9 ]", "");
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
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.
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;
}
}
Tüm özel karakterleri bulmak için dizelerdeki temel normal ifadeleri kullanabilir veya kullanıcı tanımlı dizeleri aramak / değiştirmek / silmek için desen ve eşleme sınıflarını kullanabilirsiniz. Bu bağlantı, normal ifadeler için bazı basit ve anlaşılması kolay örnekler içerir: http://www.vogella.de/articles/JavaRegularExpressions/article.html
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.
Boşluklar için bu kalıbı "[^ az AZ 0-9]" kullanın
let name = name.replace(/[&\/\\#,+()$~%!.„'":*‚^_¤?<>|@ª{«»§}©®™ ]/g, '').toLowerCase();